Packages
geo
1.2.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/geometry.ex
if Code.ensure_loaded?(Ecto.Type) do
defmodule Geo.Geometry do
@moduledoc """
Implements the Ecto.Type behaviour for all geometry types
"""
@behaviour Ecto.Type
def type, do: :geometry
def blank?(_), do: false
def load(%Geo.Point{} = geom), do: {:ok, geom}
def load(%Geo.LineString{} = geom), do: {:ok, geom}
def load(%Geo.Polygon{} = geom), do: {:ok, geom}
def load(%Geo.MultiPoint{} = geom), do: {:ok, geom}
def load(%Geo.MultiLineString{} = geom), do: {:ok, geom}
def load(%Geo.MultiPolygon{} = geom), do: {:ok, geom}
def load(%Geo.GeometryCollection{} = geom), do: {:ok, geom}
def load(_), do: :error
def dump(%Geo.Point{} = geom), do: {:ok, geom}
def dump(%Geo.LineString{} = geom), do: {:ok, geom}
def dump(%Geo.Polygon{} = geom), do: {:ok, geom}
def dump(%Geo.MultiPoint{} = geom), do: {:ok, geom}
def dump(%Geo.MultiLineString{} = geom), do: {:ok, geom}
def dump(%Geo.MultiPolygon{} = geom), do: {:ok, geom}
def dump(%Geo.GeometryCollection{} = geom), do: {:ok, geom}
def dump(_), do: :error
def cast(%Geo.Point{} = geom), do: {:ok, geom}
def cast(%Geo.LineString{} = geom), do: {:ok, geom}
def cast(%Geo.Polygon{} = geom), do: {:ok, geom}
def cast(%Geo.MultiPoint{} = geom), do: {:ok, geom}
def cast(%Geo.MultiLineString{} = geom), do: {:ok, geom}
def cast(%Geo.MultiPolygon{} = geom), do: {:ok, geom}
def cast(%Geo.GeometryCollection{} = geom), do: {:ok, geom}
def cast(%{"type" => _, "coordinates" => _} = geom), do: { :ok, Geo.JSON.decode(geom) }
def cast(%{"type" => _, "geometries" => _} = geom), do: { :ok, Geo.JSON.decode(geom) }
if Code.ensure_loaded?(Poison) do
def cast(geom) when is_binary(geom), do: { :ok, Poison.decode!(geom) |> Geo.JSON.decode }
end
def cast(_), do: :error
end
end