Author: kake Date: 2012-03-02 21:06:35 +0000 (Fri, 02 Mar 2012) New Revision: 1306
Modified: trunk/Build.PL trunk/INSTALL trunk/lib/OpenGuides/Search.pm trunk/lib/OpenGuides/Template.pm trunk/t/25_write_geo_data.t trunk/t/26_geo_data_search_form.t trunk/t/27_geo_data_edit_form.t trunk/t/33_search_advanced_search.t trunk/t/34_search_paging.t trunk/t/35_search_two_searches.t trunk/t/38_search_params.t trunk/t/39_search_form.t trunk/t/62_bug_trailing_whitespace.t trunk/wiki.cgi Log: Switched from Geography::NationalGrid (which no longer exists on CPAN) to Geo::Coordinates::OSGB/ITM
Modified: trunk/Build.PL =================================================================== --- trunk/Build.PL 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/Build.PL 2012-03-02 21:06:35 UTC (rev 1306) @@ -298,7 +298,6 @@ 'File::Spec::Functions' => 0, 'File::Temp' => 0, 'Geo::Coordinates::UTM' => 0, - 'Geography::NationalGrid' => 0, 'HTML::Entities' => 0, 'LWP::Simple' => 0, 'MIME::Lite' => 0,
Modified: trunk/INSTALL =================================================================== --- trunk/INSTALL 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/INSTALL 2012-03-02 21:06:35 UTC (rev 1306) @@ -331,8 +331,8 @@ will be able to choose between entering location data as lat/long or as grid co-ordinates.
-You must have Geography::NationalGrid::GB installed to use the British -National Grid, Geography::NationalGrid::IE to use the Irish National +You must have Geo::Coordinates::OSGB installed to use the British +National Grid, Geo::Coordinates::ITM to use the Irish National Grid, and Geo::Coordinates::UTM to use a UTM ellipsoid.
If you want to use a UTM ellipsoid, WGS-84 is the best choice, as it
Modified: trunk/lib/OpenGuides/Search.pm =================================================================== --- trunk/lib/OpenGuides/Search.pm 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/lib/OpenGuides/Search.pm 2012-03-02 21:06:35 UTC (rev 1306) @@ -706,21 +706,17 @@ && defined $vars{latlong_dist} ) { # All handlers can do lat/long, but they all do it differently. if ( $self->config->geo_handler eq 1 ) { - require Geography::NationalGrid::GB; - my $point = Geography::NationalGrid::GB->new( - Latitude => $vars{latitude}, - Longitude => $vars{longitude}, - ); - $self->{x} = $point->easting; - $self->{y} = $point->northing; + require Geo::Coordinates::OSGB; + my ( $x, $y ) = Geo::Coordinates::OSGB::ll_to_grid( + $vars{latitude}, $vars{longitude} ); + $self->{x} = sprintf( "%d", $x ); + $self->{y} = sprintf( "%d", $y ); } elsif ( $self->config->geo_handler eq 2 ) { - require Geography::NationalGrid::IE; - my $point = Geography::NationalGrid::IE->new( - Latitude => $vars{latitude}, - Longitude => $vars{longitude}, - ); - $self->{x} = $point->easting; - $self->{y} = $point->northing; + require Geo::Coordinates::ITM; + my ( $x, $y ) = Geo::Coordinates::ITM::ll_to_grid( + $vars{latitude}, $vars{longitude} ); + $self->{x} = sprintf( "%d", $x ); + $self->{y} = sprintf( "%d", $y ); } elsif ( $self->config->geo_handler eq 3 ) { require Geo::Coordinates::UTM; my ($zone, $x, $y) = Geo::Coordinates::UTM::latlon_to_utm(
Modified: trunk/lib/OpenGuides/Template.pm =================================================================== --- trunk/lib/OpenGuides/Template.pm 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/lib/OpenGuides/Template.pm 2012-03-02 21:06:35 UTC (rev 1306) @@ -6,8 +6,6 @@
use Carp qw( croak ); use CGI; # want to get rid of this and put the burden on the templates -use Geography::NationalGrid; -use Geography::NationalGrid::GB; use OpenGuides; # for $VERSION for template variable use OpenGuides::CGI; use Template; @@ -448,7 +446,8 @@
my $geo_handler = $config->geo_handler; if ( $geo_handler == 1 ) { - require Geography::NationalGrid::GB; + require Geo::Coordinates::OSGB; + my $os_x = $q->param("os_x"); my $os_y = $q->param("os_y"); my $lat = $q->param("latitude"); @@ -462,15 +461,15 @@
# If we were sent x and y, work out lat/long; and vice versa. if ( defined $os_x && length $os_x && defined $os_y && length $os_y ) { - my $point = Geography::NationalGrid::GB->new( Easting =>$os_x, - Northing=>$os_y); - $lat = sprintf("%.6f", $point->latitude); - $long = sprintf("%.6f", $point->longitude); + ( $lat, $long ) = Geo::Coordinates::OSGB::grid_to_ll( + $os_x, $os_y ); + $lat = sprintf( "%.6f", $lat ); + $long = sprintf( "%.6f", $long ); } elsif ( defined $lat && length $lat && defined $long && length $long ) { - my $point = Geography::NationalGrid::GB->new(Latitude => $lat, - Longitude => $long); - $os_x = $point->easting; - $os_y = $point->northing; + ( $os_x, $os_y ) = Geo::Coordinates::OSGB::ll_to_grid( + $lat, $long ); + $os_x = sprintf( "%d", $os_x ); + $os_y = sprintf( "%d", $os_y ); }
if ( defined $os_x && length $os_x && defined $os_y && length $os_y ) { @@ -495,7 +494,8 @@ ); } } elsif ( $geo_handler == 2 ) { - require Geography::NationalGrid::IE; + require Geo::Coordinates::ITM; + my $osie_x = $q->param("osie_x"); my $osie_y = $q->param("osie_y"); my $lat = $q->param("latitude"); @@ -507,15 +507,15 @@
# If we were sent x and y, work out lat/long; and vice versa. if ( defined $osie_x && length $osie_x && defined $osie_y && length $osie_y ) { - my $point = Geography::NationalGrid::IE->new(Easting=>$osie_x, - Northing=>$osie_y); - $lat = sprintf("%.6f", $point->latitude); - $long = sprintf("%.6f", $point->longitude); + ( $lat, $long ) = Geo::Coordinates::ITM::grid_to_ll( + $osie_x, $osie_y ); + $lat = sprintf( "%.6f", $lat ); + $long = sprintf( "%.6f", $long ); } elsif ( defined $lat && length $lat && defined $long && length $long ) { - my $point = Geography::NationalGrid::GB->new(Latitude => $lat, - Longitude => $long); - $osie_x = $point->easting; - $osie_y = $point->northing; + ( $osie_x, $osie_y ) = Geo::Coordinates::ITM::ll_to_grid( + $lat, $long ); + $osie_x = sprintf( "%d", $osie_x ); + $osie_y = sprintf( "%d", $osie_y ); } if ( defined $osie_x && length $osie_x && defined $osie_y && length $osie_y ) { %vars = ( @@ -582,13 +582,38 @@ foreach my $var ( qw( latitude longitude ) ) { next unless defined $vars{$var} && length $vars{$var}; $vars{$var."_unmunged"} = $vars{$var}; - $vars{$var} = Geography::NationalGrid->deg2string($vars{$var}); + $vars{$var} = _deg2string($vars{$var}); } }
return %vars; }
+# Slightly modified from the no-longer-available Geography::NationalGrid +# module, which was written by P Kent and distributed under the Artistic +# Licence. +sub _deg2string { + my $degrees = shift; + + # make positive + my $isneg = 0; + if ($degrees < 0) { + $isneg = 1; + $degrees = abs( $degrees ); + } elsif ($degrees == 0) { + return '0d 0m 0s'; + } + + my $d = int( $degrees ); + $degrees -= $d; + $degrees *= 60; + my $m = int( $degrees ); + $degrees -= $m; + my $s = $degrees * 60; + + return sprintf("%s%dd %um %.2fs", ($isneg?'-':''), $d, $m, $s); +} + =back
=head1 AUTHOR
Modified: trunk/t/25_write_geo_data.t =================================================================== --- trunk/t/25_write_geo_data.t 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/t/25_write_geo_data.t 2012-03-02 21:06:35 UTC (rev 1306) @@ -18,13 +18,18 @@
# Strictly speaking we don't need to skip _all_ tests if we don't have # the modules below. Revisit this when not in a hurry. -# We only actually need the former for the National Grid tests and the +# We only actually need the former two for the National Grid tests and the # latter for the UTM tests. -eval { require Geography::NationalGrid; }; +eval { require Geo::Coordinates::OSGB; }; if ( $@ ) { - plan skip_all => "Geography::NationalGrid not installed"; + plan skip_all => "Geo::Coordinates::OSGB not installed"; }
+eval { require Geo::Coordinates::ITM; }; +if ( $@ ) { + plan skip_all => "Geo::Coordinates::ITM not installed"; +} + eval { require Geo::Coordinates::UTM; }; if ( $@ ) { plan skip_all => "Geo::Coordinates::UTM not installed";
Modified: trunk/t/26_geo_data_search_form.t =================================================================== --- trunk/t/26_geo_data_search_form.t 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/t/26_geo_data_search_form.t 2012-03-02 21:06:35 UTC (rev 1306) @@ -22,13 +22,18 @@
# Strictly speaking we don't need to skip _all_ tests if we don't have # the modules below. Revisit this when not in a hurry. -# We only actually need the former for the National Grid tests and the +# We only actually need the former two for the National Grid tests and the # latter for the UTM tests. -eval { require Geography::NationalGrid; }; +eval { require Geo::Coordinates::OSGB; }; if ( $@ ) { - plan skip_all => "Geography::NationalGrid not installed"; + plan skip_all => "Geo::Coordinates::OSGB not installed"; }
+eval { require Geo::Coordinates::ITM; }; +if ( $@ ) { + plan skip_all => "Geo::Coordinates::ITM not installed"; +} + eval { require Geo::Coordinates::UTM; }; if ( $@ ) { plan skip_all => "Geo::Coordinates::UTM not installed";
Modified: trunk/t/27_geo_data_edit_form.t =================================================================== --- trunk/t/27_geo_data_edit_form.t 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/t/27_geo_data_edit_form.t 2012-03-02 21:06:35 UTC (rev 1306) @@ -22,13 +22,18 @@
# Strictly speaking we don't need to skip _all_ tests if we don't have # the modules below. Revisit this when not in a hurry. -# We only actually need the former for the National Grid tests and the +# We only actually need the former two for the National Grid tests and the # latter for the UTM tests. -eval { require Geography::NationalGrid; }; +eval { require Geo::Coordinates::OSGB; }; if ( $@ ) { - plan skip_all => "Geography::NationalGrid not installed"; + plan skip_all => "Geo::Coordinates::OSGB not installed"; }
+eval { require Geo::Coordinates::ITM; }; +if ( $@ ) { + plan skip_all => "Geo::Coordinates::ITM not installed"; +} + eval { require Geo::Coordinates::UTM; }; if ( $@ ) { plan skip_all => "Geo::Coordinates::UTM not installed";
Modified: trunk/t/33_search_advanced_search.t =================================================================== --- trunk/t/33_search_advanced_search.t 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/t/33_search_advanced_search.t 2012-03-02 21:06:35 UTC (rev 1306) @@ -17,9 +17,9 @@ plan skip_all => "Plucene not installed"; }
-eval { require Geography::NationalGrid::GB; }; +eval { require Geo::Coordinates::OSGB; }; if ( $@ ) { - plan skip_all => "Geography::NationalGrid::GB not installed"; + plan skip_all => "Geo::Coordinates::OSGB not installed"; }
plan tests => 8;
Modified: trunk/t/34_search_paging.t =================================================================== --- trunk/t/34_search_paging.t 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/t/34_search_paging.t 2012-03-02 21:06:35 UTC (rev 1306) @@ -28,9 +28,9 @@ my $guide = OpenGuides->new( config => $config );
# Test with OS co-ords. -eval { require Geography::NationalGrid::GB; }; +eval { require Geo::Coordinates::OSGB; }; SKIP: { - skip "Geography::NationalGrid::GB not installed", 3 if $@; + skip "Geo::Coordinates::OSGB not installed", 3 if $@; $config->geo_handler( 1 );
foreach my $i ( 1 .. 50 ) { @@ -67,9 +67,9 @@ }
# Test with OSIE co-ords. -eval { require Geography::NationalGrid::IE; }; +eval { require Geo::Coordinates::ITM; }; SKIP: { - skip "Geography::NationalGrid::IE not installed", 3 if $@; + skip "Geo::Coordinates::ITM not installed", 3 if $@;
# We must create a new search object after changing the geo_handler # in order to force it to create a fresh locator.
Modified: trunk/t/35_search_two_searches.t =================================================================== --- trunk/t/35_search_two_searches.t 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/t/35_search_two_searches.t 2012-03-02 21:06:35 UTC (rev 1306) @@ -18,13 +18,18 @@
# Strictly speaking we don't need to skip _all_ tests if we don't have # the modules below. Revisit this when not in a hurry. -# We only actually need the former for the National Grid tests and the +# We only actually need the former two for the National Grid tests and the # latter for the UTM tests. -eval { require Geography::NationalGrid; }; +eval { require Geo::Coordinates::OSGB; }; if ( $@ ) { - plan skip_all => "Geography::NationalGrid not installed"; + plan skip_all => "Geo::Coordinates::OSGB not installed"; }
+eval { require Geo::Coordinates::ITM; }; +if ( $@ ) { + plan skip_all => "Geo::Coordinates::ITM not installed"; +} + eval { require Geo::Coordinates::UTM; }; if ( $@ ) { plan skip_all => "Geo::Coordinates::UTM not installed";
Modified: trunk/t/38_search_params.t =================================================================== --- trunk/t/38_search_params.t 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/t/38_search_params.t 2012-03-02 21:06:35 UTC (rev 1306) @@ -19,12 +19,18 @@
# Strictly speaking we don't need to skip _all_ tests if we don't have # the modules below. Revisit this when not in a hurry. -# We only actually need them for the tests where lat/long are converted. -eval { require Geography::NationalGrid; }; +# We only actually need the former two for the National Grid tests and the +# latter for the UTM tests. +eval { require Geo::Coordinates::OSGB; }; if ( $@ ) { - plan skip_all => "Geography::NationalGrid not installed"; + plan skip_all => "Geo::Coordinates::OSGB not installed"; }
+eval { require Geo::Coordinates::ITM; }; +if ( $@ ) { + plan skip_all => "Geo::Coordinates::ITM not installed"; +} + eval { require Geo::Coordinates::UTM; }; if ( $@ ) { plan skip_all => "Geo::Coordinates::UTM not installed";
Modified: trunk/t/39_search_form.t =================================================================== --- trunk/t/39_search_form.t 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/t/39_search_form.t 2012-03-02 21:06:35 UTC (rev 1306) @@ -22,13 +22,18 @@
# Strictly speaking we don't need to skip _all_ tests if we don't have # the modules below. Revisit this when not in a hurry. -# We only actually need the former for the National Grid tests and the +# We only actually need the former two for the National Grid tests and the # latter for the UTM tests. -eval { require Geography::NationalGrid; }; +eval { require Geo::Coordinates::OSGB; }; if ( $@ ) { - plan skip_all => "Geography::NationalGrid not installed"; + plan skip_all => "Geo::Coordinates::OSGB not installed"; }
+eval { require Geo::Coordinates::ITM; }; +if ( $@ ) { + plan skip_all => "Geo::Coordinates::ITM not installed"; +} + eval { require Geo::Coordinates::UTM; }; if ( $@ ) { plan skip_all => "Geo::Coordinates::UTM not installed";
Modified: trunk/t/62_bug_trailing_whitespace.t =================================================================== --- trunk/t/62_bug_trailing_whitespace.t 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/t/62_bug_trailing_whitespace.t 2012-03-02 21:06:35 UTC (rev 1306) @@ -22,8 +22,8 @@ my $guide = OpenGuides->new( config => $config );
SKIP: { - eval { require Geography::NationalGrid::GB; }; - skip "Geography::NationalGrid::GB not installed", 2 if $@; + eval { require Geo::Coordinates::OSGB; }; + skip "Geo::Coordinates::OSGB not installed", 2 if $@;
my $q = CGI->new( "" ); $q->param( -name => "os_x", -value => " 123456 " ); @@ -43,8 +43,8 @@ }
SKIP: { - eval { require Geography::NationalGrid::IE; }; - skip "Geography::NationalGrid::IE not installed", 2 if $@; + eval { require Geo::Coordinates::ITM; }; + skip "Geo::Coordinates::ITM not installed", 2 if $@;
$config->geo_handler( 2 ); my $q = CGI->new( "" );
Modified: trunk/wiki.cgi =================================================================== --- trunk/wiki.cgi 2012-03-01 22:18:12 UTC (rev 1305) +++ trunk/wiki.cgi 2012-03-02 21:06:35 UTC (rev 1306) @@ -10,8 +10,6 @@ use CGI qw/:standard/; use CGI::Carp qw(croak); use Wiki::Toolkit; -use Geography::NationalGrid; -use Geography::NationalGrid::GB; use OpenGuides; use OpenGuides::CGI; use OpenGuides::Config;