GeoSpatialite

View Source

Implements encoding and decoding geo geometries to SpatiaLite format.

Geometries currently supported:

  • Point
  • LineString
  • Polygon
  • MultiPolygon

Geometries not yet supported:

  • PointZ
  • PointM
  • PointZM
  • LineStringZ
  • LineStringZM
  • PolygonZ
  • MultiPointZ
  • MultiLineString
  • MultiLineStringZ
  • MultiPoint
  • MultiPolygonZ
  • GeometryCollection

The TinyPoint encoding is also not yet supported.

Installation

def deps do
  [
    {:geo_spatialite, "~> 0.1.0"}
  ]
end

Using SpatiaLite with SQLite

sqlite3 shell

The SpatiaLite library must be loaded via the .load command. For libspatialite installed via Homebrew on macOS, it would look something like this:

brew install spatialite-tools
sqlite3 app_dev.db
.load /opt/homebrew/lib/mod_spatialite.dylib

The command can be placed in .sqliterc to load it automatically.

Ecto

The SpatiaLite extension must be loaded via Ecto's load_extensions. Using the previous example for Homebrew installation on macOS, the configuration would be:

# config/dev.exs

config :app, App.Repo,
  database: Path.expand("../app_dev.db", Path.dirname(__ENV__.file)),
  pool_size: 5,
  stacktrace: true,
  load_extensions: [
    "/opt/homebrew/lib/mod_spatialite.dylib"
  ],
  show_sensitive_data_on_connection_error: true

Another example might be configuration for using runtime configuration to deploy to a Docker container.

RUN apt-get install libsqlite3-mod-spatialite
# config/runtime.exs

  config :app, App.Repo,
    database: database_path,
    pool_size: String.to_integer(System.get_env("POOL_SIZE") || "5"),
    custom_pragmas: [{"trusted_schema", true}],
    load_extensions: [
      "/usr/lib/x86_64-linux-gnu/mod_spatialite.so"
    ]