Packages
geo
1.0.1
4.1.0
4.0.1
4.0.0
3.6.0
3.5.1
3.5.0
3.4.3
3.4.2
3.4.1
3.4.0
3.3.8
3.3.7
3.3.5
3.3.4
3.3.3
3.3.2
3.3.1
3.3.0
3.2.0
3.1.0
3.0.0
2.1.0
2.0.0
1.5.0
1.4.1
1.4.0
1.3.1
1.3.0
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.18.0
0.17.0
0.16.1
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.0
0.12.0
0.11.2
0.11.1
0.11.0
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.0
0.7.2
0.7.1
0.6.1
0.5.1
Encodes and decodes WKB, WKT, and GeoJSON formats.
Current section
Files
Jump to
Current section
Files
lib/geo/postgis/extension.ex
if Code.ensure_loaded?(Postgrex.Extension) do
defmodule Geo.PostGIS.Extension do
alias Postgrex.TypeInfo
@behaviour Postgrex.Extension
@moduledoc """
PostGIS extension for Postgrex. Supports Geometry and Geography data types
opts = [hostname: "localhost", username: "postgres", database: "geo_postgrex_test",
extensions: [{Geo.PostGIS.Extension, library: Geo}] ]
[hostname: "localhost", username: "postgres", database: "geo_postgrex_test",
extensions: [{Geo.PostGIS.Extension, library: Geo}]]
{:ok, pid} = Postgrex.Connection.start_link(opts)
{:ok, #PID<0.115.0>}
geo = %Geo.Point{coordinates: {30, -90}, srid: 4326}
%Geo.Point{coordinates: {30, -90}, srid: 4326}
{:ok, _} = Postgrex.Connection.query(pid, "CREATE TABLE point_test (id int, geom geometry(Point, 4326))")
{:ok, %Postgrex.Result{columns: nil, command: :create_table, num_rows: 0, rows: nil}}
{:ok, _} = Postgrex.Connection.query(pid, "INSERT INTO point_test VALUES ($1, $2)", [42, geo])
{:ok, %Postgrex.Result{columns: nil, command: :insert, num_rows: 1, rows: nil}}
Postgrex.Connection.query(pid, "SELECT * FROM point_test")
{:ok, %Postgrex.Result{columns: ["id", "geom"], command: :select, num_rows: 1,
rows: [{42, %Geo.Point{coordinates: {30.0, -90.0}, srid: 4326}}]}}
"""
def init(_parameters, _opts) do
:ok
end
def matching(_) do
[type: "geometry", type: "geography"]
end
def format(_) do
:text
end
def encode(%TypeInfo{type: "geometry"}, geom, _state, _library) do
Geo.WKT.encode(geom)
end
def encode(%TypeInfo{type: "geography"}, geom, _state, _library) do
Geo.WKT.encode(geom)
end
def decode(%TypeInfo{type: "geometry"}, wkb, _state, _library) do
Geo.WKB.decode(wkb)
end
def decode(%TypeInfo{type: "geography"}, wkb, _state, _library) do
Geo.WKB.decode(wkb)
end
end
end