Packages
geo
0.9.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/geo_json.ex
defmodule Geo.JSON do
alias Geo.Geometry
use Jazz
def decode(geo_json) do
decoded_json = JSON.decode!(geo_json, keys: :atoms)
case Map.has_key?(decoded_json, :geometries) do
true ->
Enum.map(decoded_json.geometries,
fn(x) -> %Geometry{ type: decode_type(x.type), coordinates: x.coordinates } end)
false ->
%Geometry{ type: decode_type(decoded_json.type), coordinates: decoded_json.coordinates }
end
end
def encode(geom) when is_list(geom) do
JSON.encode!(%{
type: "GeometryCollection",
geometries: Enum.map(geom, fn(x) -> %{ type: encode_type(x.type), coordinates: x.coordinates } end)
})
end
def encode(geom) do
JSON.encode!(%{ type: encode_type(geom.type), coordinates: geom.coordinates })
end
defp decode_type(geo_json_type) do
case geo_json_type do
"Point" ->
:point
"LineString" ->
:line_string
"Polygon" ->
:polygon
"MultiPoint" ->
:multi_point
"MultiLineString" ->
:multi_line_string
"MultiPolygon" ->
:multi_polygon
_ ->
:geometry_collection
end
end
defp encode_type(geom_type) do
case geom_type do
:point ->
"Point"
:line_string ->
"LineString"
:polygon ->
"Polygon"
:multi_point ->
"MultiPoint"
:multi_line_string ->
"MultiLineString"
:multi_polygon ->
"MultiPolygon"
_ ->
"GeometryCollection"
end
end
end