@@ -66,12 +66,15 @@ defmodule Mobilizon.Service.Geospatial.Addok do
|
||||
defp process_data(features) do
|
||||
features
|
||||
|> Enum.map(fn %{"geometry" => geometry, "properties" => properties} ->
|
||||
coordinates = geometry |> Map.get("coordinates") |> Provider.coordinates()
|
||||
|
||||
%Address{
|
||||
country: Map.get(properties, "country", default_country()),
|
||||
locality: Map.get(properties, "city"),
|
||||
region: Map.get(properties, "context"),
|
||||
description: Map.get(properties, "name") || street_address(properties),
|
||||
geom: geometry |> Map.get("coordinates") |> Provider.coordinates(),
|
||||
geom: coordinates,
|
||||
timezone: Provider.timezone(coordinates),
|
||||
postal_code: Map.get(properties, "postcode"),
|
||||
street: properties |> street_address()
|
||||
}
|
||||
|
||||
@@ -124,12 +124,15 @@ defmodule Mobilizon.Service.Geospatial.GoogleMaps do
|
||||
description
|
||||
end
|
||||
|
||||
coordinates = Provider.coordinates([lon, lat])
|
||||
|
||||
%Address{
|
||||
country: Map.get(components, "country"),
|
||||
locality: Map.get(components, "locality"),
|
||||
region: Map.get(components, "administrative_area_level_1"),
|
||||
description: description,
|
||||
geom: [lon, lat] |> Provider.coordinates(),
|
||||
geom: coordinates,
|
||||
timezone: Provider.timezone(coordinates),
|
||||
postal_code: Map.get(components, "postal_code"),
|
||||
street: street_address(components),
|
||||
origin_id: "gm:" <> to_string(place_id)
|
||||
|
||||
@@ -98,12 +98,15 @@ defmodule Mobilizon.Service.Geospatial.MapQuest do
|
||||
end
|
||||
|
||||
defp produce_address(address, lat, lng) do
|
||||
coordinates = Provider.coordinates([lng, lat])
|
||||
|
||||
%Address{
|
||||
country: Map.get(address, "adminArea1"),
|
||||
locality: Map.get(address, "adminArea5"),
|
||||
region: Map.get(address, "adminArea3"),
|
||||
description: Map.get(address, "street"),
|
||||
geom: [lng, lat] |> Provider.coordinates(),
|
||||
geom: coordinates,
|
||||
timezone: Provider.timezone(coordinates),
|
||||
postal_code: Map.get(address, "postalCode"),
|
||||
street: Map.get(address, "street")
|
||||
}
|
||||
|
||||
@@ -75,7 +75,8 @@ defmodule Mobilizon.Service.Geospatial.Mimirsbrunn do
|
||||
"properties" => %{"geocoding" => geocoding}
|
||||
} ->
|
||||
address = process_address(geocoding)
|
||||
%Address{address | geom: Provider.coordinates(coordinates)}
|
||||
coordinates = Provider.coordinates(coordinates)
|
||||
%Address{address | geom: coordinates, timezone: Provider.timezone(coordinates)}
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
@@ -75,7 +75,8 @@ defmodule Mobilizon.Service.Geospatial.Nominatim do
|
||||
"properties" => %{"geocoding" => geocoding}
|
||||
} ->
|
||||
address = process_address(geocoding)
|
||||
%Address{address | geom: Provider.coordinates(coordinates)}
|
||||
coordinates = Provider.coordinates(coordinates)
|
||||
%Address{address | geom: coordinates, timezone: Provider.timezone(coordinates)}
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
@@ -76,7 +76,8 @@ defmodule Mobilizon.Service.Geospatial.Pelias do
|
||||
"properties" => properties
|
||||
} ->
|
||||
address = process_address(properties)
|
||||
%Address{address | geom: Provider.coordinates(coordinates)}
|
||||
coordinates = Provider.coordinates(coordinates)
|
||||
%Address{address | geom: coordinates, timezone: Provider.timezone(coordinates)}
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
@@ -69,12 +69,15 @@ defmodule Mobilizon.Service.Geospatial.Photon do
|
||||
defp process_data(features) do
|
||||
features
|
||||
|> Enum.map(fn %{"geometry" => geometry, "properties" => properties} ->
|
||||
coordinates = geometry |> Map.get("coordinates") |> Provider.coordinates()
|
||||
|
||||
%Address{
|
||||
country: Map.get(properties, "country"),
|
||||
locality: Map.get(properties, "city"),
|
||||
region: Map.get(properties, "state"),
|
||||
description: Map.get(properties, "name") || street_address(properties),
|
||||
geom: geometry |> Map.get("coordinates") |> Provider.coordinates(),
|
||||
geom: coordinates,
|
||||
timezone: Provider.timezone(coordinates),
|
||||
postal_code: Map.get(properties, "postcode"),
|
||||
street: properties |> street_address()
|
||||
}
|
||||
|
||||
@@ -79,6 +79,19 @@ defmodule Mobilizon.Service.Geospatial.Provider do
|
||||
|
||||
def coordinates(_), do: nil
|
||||
|
||||
@doc """
|
||||
Returns the timezone for a Geo.Point
|
||||
"""
|
||||
@spec timezone(nil | Geo.Point.t()) :: nil | String.t()
|
||||
def timezone(nil), do: nil
|
||||
|
||||
def timezone(%Geo.Point{} = point) do
|
||||
case TzWorld.timezone_at(point) do
|
||||
{:ok, tz} -> tz
|
||||
{:error, _err} -> nil
|
||||
end
|
||||
end
|
||||
|
||||
@spec endpoint(atom()) :: String.t()
|
||||
def endpoint(provider) do
|
||||
Application.get_env(:mobilizon, provider) |> get_in([:endpoint])
|
||||
|
||||
Reference in New Issue
Block a user