aboutsummaryrefslogtreecommitdiffstats
path: root/web/rss.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'web/rss.cgi')
-rwxr-xr-xweb/rss.cgi43
1 files changed, 26 insertions, 17 deletions
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;