A simple, efficient geocoder/reverse geocoder with a built-in cache.
Is it extensible? Yes. Is it any good? Absolutely.
Keep calm and add Geocoder to your mix.exs dependencies:
defdepsdo[{:geocoder,"~> 0.7"}]endAdd it to your starting applications too:
defapplicationdo[applications: [:logger,:geocoder]]endSet pool configuration:
config:geocoder,:worker_pool_config,[size: 4,max_overflow: 2]Set provider configuration:
config:geocoder,:worker,[provider: Geocoder.Providers.GoogleMaps# is the default, or OpenStreetMaps]If you need to set a proxy (or any other option supported by HTTPoison.get/3):
config:geocoder,Geocoder.Worker,[httpoison_options: [proxy: "my.proxy.server:3128",proxy_auth: {"username","password"}]]Let's rumble!
Geocoder.call("Toronto, ON")Geocoder.call({43.653226,-79.383184})You can pass options to the function that will be passed to the geocoder provider, for example:
Geocoder.call(address: "Toronto, ON",language: "es",key: "...", ...)See here and here for a list of supported parameters for the default geocoder provider (Geocoder.Provider.GoogleMaps).
And you're done! How simple was that?