diff options
-rw-r--r-- | conf/httpd.conf | 3 | ||||
-rwxr-xr-x | web/rss.cgi | 43 |
2 files changed, 28 insertions, 18 deletions
diff --git a/conf/httpd.conf b/conf/httpd.conf index a12f6c0cc..f95be8f37 100644 --- a/conf/httpd.conf +++ b/conf/httpd.conf @@ -20,7 +20,7 @@ # Copyright (c) 2006 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org # -# $Id: httpd.conf,v 1.18 2007-06-17 09:40:51 matthew Exp $ +# $Id: httpd.conf,v 1.19 2007-06-18 20:11:44 matthew Exp $ DirectoryIndex index.cgi @@ -40,6 +40,7 @@ RewriteRule ^/rss/([0-9]+),([0-9]+)$ /rss.cgi?type=local_problems;x=$1;y=$2 RewriteRule ^/rss/l/([0-9.-]+),([0-9.-]+)$ /rss.cgi?type=local_problems;lat=$1;lon=$2 [QSA] RewriteRule ^/rss/([0-9]+),([0-9]+)/([0-9]+)$ /rss.cgi?type=local_problems;x=$1;y=$2;d=$3 [QSA] RewriteRule ^/rss/([0-9]+)/([0-9]+)/([0-9]+)$ /rss.cgi?type=local_problems;x=$1;y=$2;d=$3 [QSA] +RewriteRule ^/rss/l/([0-9]+)/([0-9]+)/([0-9]+)$ /rss.cgi?type=local_problems;lat=$1;lon=$2;d=$3 [QSA] RewriteRule ^/rss/council/([0-9]+)$ /rss.cgi?type=council_problems;id=$1 [QSA] RewriteRule ^/rss/problems$ /rss.cgi?type=new_problems [QSA] diff --git a/web/rss.cgi b/web/rss.cgi index 9a8996048..a83216fde 100755 --- a/web/rss.cgi +++ b/web/rss.cgi @@ -6,7 +6,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: matthew@mysociety.org. WWW: http://www.mysociety.org # -# $Id: rss.cgi,v 1.13 2007-06-16 21:55:42 matthew Exp $ +# $Id: rss.cgi,v 1.14 2007-06-18 20:11:44 matthew Exp $ use strict; require 5.8.0; @@ -22,6 +22,8 @@ use mySociety::Config; use mySociety::DBHandle qw(dbh); use mySociety::Alert; use mySociety::Web; +use mySociety::GeoUtil; +use mySociety::Gaze; BEGIN { mySociety::Config::set_file("$FindBin::Bin/../conf/general"); @@ -40,25 +42,32 @@ sub main { if ($type eq 'local_problems') { my $x = $q->param('x'); my $y = $q->param('y'); - if (!$x && !$y) { - my $lat = $q->param('lat'); - my $lon = $q->param('lon'); - if (defined $lat && defined $lon) { - ($x, $y) = mySociety::GeoUtil::wgs84_to_national_grid($lat, $lon, 'G'); - $x = Page::os_to_tile($x); - $y = Page::os_to_tile($y); - } + my $lat = $q->param('lat'); + my $lon = $q->param('lon'); + my ($e, $n); + if ($lat && $lon) { + ($e, $n) = mySociety::GeoUtil::wgs84_to_national_grid($lat, $lon, 'G'); + $x = Page::os_to_tile($e); + $y = Page::os_to_tile($n); + } elsif ($x && $y) { + $e = Page::tile_to_os($x); + $n = Page::tile_to_os($y); + ($lat, $lon) = mySociety::GeoUtil::national_grid_to_wgs84($e, $n, 'G'); + } else { + die "Missing x/y or lat/lon parameter in RSS feed"; } - die "Missing x/y or lat/lon parameter in RSS feed" if (!$x && !$y); - my $qs = 'x='.$x.';y='.$y; + my $qs = "x=$x;y=$y"; my $d = $q->param('d'); - $qs .= ";d=$d" if $d; - $d = 10 unless $d; - $d = 100 if $d > 100; - $x = ($x * 5000 / 31); - $y = ($y * 5000 / 31); - mySociety::Alert::generate_rss($type, $qs, $x, $y, $d); + if ($d) { + $qs .= ";d=$d"; + $d = 100 if $d > 100; + } else { + $d = mySociety::Gaze::get_radius_containing_population($lat, $lon, 200000); + $d = int($d*10+0.5)/10; + } + + mySociety::Alert::generate_rss($type, $qs, $e, $n, $d); } elsif ($type eq 'new_updates') { my $id = $q->param('id'); my $qs = 'id='.$id; |