diff options
author | Matthew Somerville <matthew@mysociety.org> | 2019-09-19 20:27:46 +0100 |
---|---|---|
committer | Matthew Somerville <matthew@mysociety.org> | 2019-09-19 20:27:46 +0100 |
commit | 9d12ecc52d5a3413b12d3781349e228026e79f5e (patch) | |
tree | b3fdabfa42cf0c7264f5ecb29ccb6a8637fb0107 /perllib/FixMyStreet/Geocode.pm | |
parent | 645c0663c4c7ce2d2d240858ed06446efe8ad328 (diff) | |
parent | fa879675558632ae54b32a10707397a01edc362d (diff) |
Merge branch 'bexley-map-tiles'
Diffstat (limited to 'perllib/FixMyStreet/Geocode.pm')
-rw-r--r-- | perllib/FixMyStreet/Geocode.pm | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/perllib/FixMyStreet/Geocode.pm b/perllib/FixMyStreet/Geocode.pm index d552afaa5..61c968269 100644 --- a/perllib/FixMyStreet/Geocode.pm +++ b/perllib/FixMyStreet/Geocode.pm @@ -13,12 +13,14 @@ use JSON::MaybeXS; use LWP::Simple qw($ua); use Path::Tiny; use URI::Escape; -use FixMyStreet::Geocode::Bing; -use FixMyStreet::Geocode::Google; -use FixMyStreet::Geocode::OSM; -use FixMyStreet::Geocode::Zurich; use Utils; +use Module::Pluggable + sub_name => 'geocoders', + search_path => __PACKAGE__, + require => 1, + except => qr/Address/; + # lookup STRING CONTEXT # Given a user-inputted string, try and convert it into co-ordinates using either # MaPit if it's a postcode, or some web API otherwise. Returns an array of @@ -44,14 +46,17 @@ sub lookup { sub string { my ($s, $c) = @_; - my $service = $c->cobrand->get_geocoder($c); + my $service = $c->cobrand->get_geocoder(); $service = $service->{type} if ref $service; - $service = 'OSM' unless $service =~ /^(Bing|Google|OSM|Zurich)$/; - $service = 'OSM' if $service eq 'Bing' && !FixMyStreet->config('BING_MAPS_API_KEY'); - $service = "FixMyStreet::Geocode::${service}::string"; - no strict 'refs'; - return &$service($s, $c); + $service = __PACKAGE__ . '::' . $service; + my %avail = map { $_ => 1 } __PACKAGE__->geocoders; + + if (!$avail{$service} || ($service->can('setup') && !$service->setup)) { + $service = __PACKAGE__ . '::OSM'; + } + + return $service->string($s, $c); } # escape STRING CONTEXT |