parent
0dcd9569f8
commit
3cbf5e5daa
|
@ -0,0 +1,44 @@
|
||||||
|
defmodule Mobilizon.Service.Geospatial.Hat do
|
||||||
|
@moduledoc """
|
||||||
|
Hat backend.
|
||||||
|
"""
|
||||||
|
|
||||||
|
alias Mobilizon.Addresses.Address
|
||||||
|
alias Mobilizon.Service.Geospatial.Addok
|
||||||
|
alias Mobilizon.Service.Geospatial.Nominatim
|
||||||
|
alias Mobilizon.Service.Geospatial.Provider
|
||||||
|
import Mobilizon.Service.Geospatial.Provider, only: [endpoint: 1]
|
||||||
|
require Logger
|
||||||
|
|
||||||
|
@behaviour Provider
|
||||||
|
|
||||||
|
@impl Provider
|
||||||
|
@doc """
|
||||||
|
Hat implementation for `c:Mobilizon.Service.Geospatial.Provider.geocode/3`.
|
||||||
|
"""
|
||||||
|
@spec geocode(String.t(), keyword()) :: list(Address.t())
|
||||||
|
def geocode(lon, lat, options \\ []) do
|
||||||
|
tasks = [
|
||||||
|
Task.async(fn -> Addok.geocode(lon, lat, options) end),
|
||||||
|
Task.async(fn -> Nominatim.geocode(lon, lat, options) end)
|
||||||
|
]
|
||||||
|
|
||||||
|
[addrlist1, addrlist2] = Task.await_many(tasks, 12_000)
|
||||||
|
addrlist2 ++ addrlist1
|
||||||
|
end
|
||||||
|
|
||||||
|
@impl Provider
|
||||||
|
@doc """
|
||||||
|
Hat implementation for `c:Mobilizon.Service.Geospatial.Provider.search/2`.
|
||||||
|
"""
|
||||||
|
@spec search(String.t(), keyword()) :: list(Address.t())
|
||||||
|
def search(q, options \\ []) do
|
||||||
|
tasks = [
|
||||||
|
Task.async(fn -> Addok.search(q, options) end),
|
||||||
|
Task.async(fn -> Nominatim.search(q, options) end)
|
||||||
|
]
|
||||||
|
|
||||||
|
[addrlist1, addrlist2] = Task.await_many(tasks, 12_000)
|
||||||
|
addrlist2 ++ addrlist1
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue