From 0dc3e4f2c0b6e90c2b67fab5aaf7c9c3d2b1f971 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Fri, 23 Jan 2015 14:35:00 +0000 Subject: Expire cached geolocations after a week. And refactor geoloction caching code into one function (except for Zurich which has its own SOAP based system). --- perllib/FixMyStreet/Geocode/OSM.pm | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) (limited to 'perllib/FixMyStreet/Geocode/OSM.pm') diff --git a/perllib/FixMyStreet/Geocode/OSM.pm b/perllib/FixMyStreet/Geocode/OSM.pm index 919940f78..9a27b1576 100644 --- a/perllib/FixMyStreet/Geocode/OSM.pm +++ b/perllib/FixMyStreet/Geocode/OSM.pm @@ -9,11 +9,7 @@ package FixMyStreet::Geocode::OSM; use warnings; use strict; -use Digest::MD5 qw(md5_hex); -use Encode; -use File::Slurp; -use File::Path (); -use LWP::Simple qw($ua); +use LWP::Simple; use Memcached; use XML::Simple; use mySociety::Locale; @@ -47,25 +43,11 @@ sub string { if $params->{country}; $url .= join('&', map { "$_=$query_params{$_}" } keys %query_params); - my $cache_dir = FixMyStreet->config('GEO_CACHE') . 'osm/'; - my $cache_file = $cache_dir . md5_hex($url); - my $js; - if (-s $cache_file) { - $js = File::Slurp::read_file($cache_file); - } else { - $ua->timeout(15); - $js = LWP::Simple::get($url); - $js = encode_utf8($js) if utf8::is_utf8($js); - File::Path::mkpath($cache_dir); - File::Slurp::write_file($cache_file, $js) if $js; - } - + my $js = FixMyStreet::Geocode::cache('osm', $url); if (!$js) { return { error => _('Sorry, we could not find that location.') }; } - $js = JSON->new->utf8->allow_nonref->decode($js); - my ( $error, @valid_locations, $latitude, $longitude ); foreach (@$js) { # These co-ordinates are output as query parameters in a URL, make sure they have a "." -- cgit v1.2.3 From da63f72c27e16d491f9103b9a8cbdb2fd96d2b59 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Thu, 22 Jan 2015 15:57:45 +0000 Subject: Make sure all co-ordinates are stringified. This includes MapIt postcode lookups, geocoding, query parameters, tile clicks. Stringifying truncates them to six decimal places, which means we no longer need any "short" versions anywhere, and the JSON response will always uses a decimal point regardless of locale. --- perllib/FixMyStreet/Geocode/OSM.pm | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'perllib/FixMyStreet/Geocode/OSM.pm') diff --git a/perllib/FixMyStreet/Geocode/OSM.pm b/perllib/FixMyStreet/Geocode/OSM.pm index 919940f78..082d8fbc1 100644 --- a/perllib/FixMyStreet/Geocode/OSM.pm +++ b/perllib/FixMyStreet/Geocode/OSM.pm @@ -16,7 +16,7 @@ use File::Path (); use LWP::Simple qw($ua); use Memcached; use XML::Simple; -use mySociety::Locale; +use Utils; my $osmapibase = "http://www.openstreetmap.org/api/"; my $nominatimbase = "http://nominatim.openstreetmap.org/"; @@ -68,15 +68,14 @@ sub string { my ( $error, @valid_locations, $latitude, $longitude ); foreach (@$js) { - # These co-ordinates are output as query parameters in a URL, make sure they have a "." - ( $latitude, $longitude ) = ( $_->{lat}, $_->{lon} ); - mySociety::Locale::in_gb_locale { - push (@$error, { - address => $_->{display_name}, - latitude => sprintf('%0.6f', $latitude), - longitude => sprintf('%0.6f', $longitude) - }); - }; + ( $latitude, $longitude ) = + map { Utils::truncate_coordinate($_) } + ( $_->{lat}, $_->{lon} ); + push (@$error, { + address => $_->{display_name}, + latitude => $latitude, + longitude => $longitude + }); push (@valid_locations, $_); } -- cgit v1.2.3