aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/Geocode/Bing.pm
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2021-10-07 13:32:40 +0200
committerMarius Halden <marius.h@lden.org>2021-10-07 13:32:40 +0200
commit09dacfc6b8bf62addeee16c20b1d90c2a256da96 (patch)
tree7caa2bf9e92227ab74448f9b746dd28bbcb81b2a /perllib/FixMyStreet/Geocode/Bing.pm
parent585e57484f9c6332668bf1ac0a6a3b39dbe32223 (diff)
parentcea89fb87a96943708a1db0f646492fbfaaf000f (diff)
Merge tag 'v3.1' into fiksgatami-devfiksgatami-dev
Diffstat (limited to 'perllib/FixMyStreet/Geocode/Bing.pm')
-rw-r--r--perllib/FixMyStreet/Geocode/Bing.pm24
1 files changed, 23 insertions, 1 deletions
diff --git a/perllib/FixMyStreet/Geocode/Bing.pm b/perllib/FixMyStreet/Geocode/Bing.pm
index 1d39d911f..8c5366d3d 100644
--- a/perllib/FixMyStreet/Geocode/Bing.pm
+++ b/perllib/FixMyStreet/Geocode/Bing.pm
@@ -7,6 +7,7 @@
package FixMyStreet::Geocode::Bing;
use strict;
+use warnings;
use FixMyStreet::Geocode;
use Utils;
@@ -36,6 +37,8 @@ sub string {
$url .= '&userMapView=' . join(',', @{$params->{bounds}})
if $params->{bounds};
$url .= '&userLocation=' . $params->{centre} if $params->{centre};
+ $url .= '&userIp=127.0.0.1'; # So server location does not affect results
+ $url .= '&maxResults=10'; # Match what is said in the front end
$url .= '&c=' . $params->{bing_culture} if $params->{bing_culture};
$c->stash->{geocoder_url} = $url;
@@ -50,9 +53,28 @@ sub string {
my $results = $js->{resourceSets}->[0]->{resources};
my ( $error, @valid_locations, $latitude, $longitude );
+ # If there are any High/Medium confidence results, don't include Low ones
+ my $exclude_low;
+ foreach (@$results) {
+ my $confidence = $_->{confidence};
+ if ($confidence eq 'High' || $confidence eq 'Medium') {
+ $exclude_low = 1;
+ last;
+ }
+ }
+ if ($exclude_low) {
+ @$results = grep { $_->{confidence} ne 'Low' } @$results;
+ }
+
foreach (@$results) {
my $address = $_->{name};
- next if $params->{bing_country} && $_->{address}->{countryRegion} ne $params->{bing_country};
+ if ($params->{bing_country}) {
+ next if $_->{address}->{countryRegion} ne $params->{bing_country};
+ $address =~ s/, $params->{bing_country}$//;
+ }
+ if ($address !~ /$_->{address}->{locality}/) {
+ $address .= ", $_->{address}->{locality}";
+ }
# Getting duplicate, yet different, results from Bing sometimes
next if @valid_locations