GeoSpatialite
View SourceImplements 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"}
]
endUsing 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: trueAnother 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"
]