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