340 likes | 431 Views
Geographical perl modules. Some etymology. Some etymology. geo'graphy Drawing the Earth. Some etymology. geo'graphy Drawing the Earth geo'metry Measuring the Earth. The interest in geography. The interest in geography. The Open Guide to London
E N D
Some etymology • geo'graphy • Drawing the Earth
Some etymology • geo'graphy • Drawing the Earth • geo'metry • Measuring the Earth
The interest in geography • The Open Guide to London • Geocache, MUD-London and other web based mapping ideas
The interest in geography • 'Grubstreet' had map links with OS grid coordinates (www.streetmap.co.uk) • We can use the X and Y to plot a map.
Find by distance • We know the location of A (X1, Y1) • We know the location of B (X2, Y2) • The distance between them is: Sqrt ( (X2 - X1)^2 + (Y2 - Y1)^2) • And: OS eastings and northings work in Metres
BUT: everyone else uses Latitude and Longitude • The standard for GPS • Works worldwide
The problem • The world is flat
The problem • The world is flat round
Mercator's Projection • Was designed for nautical use • Preserves angles (azimuth, heading) • Distorts large distances • Works well over short range distances • The Mercator projection is geared to temperate latitudes (e.g. Europe)
Ordnance Survey Grid • Is a transverse Mercator, with false (offset) Easting and Northing. • A perl module exists to convert between OS Grid and Lat/Long • Geography::NationalGrid
Geography::NationalGrid • Object Orientated interface • Each object is a location • As parameters to new specify one of the following: • Lat/Long • OS Grid reference e.g. TQ 123456 • 6 digit Easting and Northing (i.e. X and Y)
Geography::NationalGrid • Method calls include: • latitude, longitude • gridReference • easting, northing • deg2string( $degrees ) • Converts an angle to degrees, minutes and seconds
Geography::NationalGrid • Subclassable • Subclasses are used to implement grids for individual countries. • The module comes with: • Geography::NationalGrid::GB • Geography::NationalGrid::IE
Back to OpenGuides • Location and find_by_distance are based on the Ordnance Survey grid
Back to OpenGuides • Location and find_by_distance are based on the Ordnance Survey grid • The OS charge £££ licence fees to use their data and maps
Back to OpenGuides • Location and find_by_distance are based on the Ordnance Survey grid • The OS charge £££ licence fees to use their data and maps • We want a system that will work outside the UK and Ireland
Why don't we do it ourselves? Radius of a circle of parallel R = E cos A where E = radius of Earth A = latitude
The radian approximation • For small θ sin θ < θ < tan θ θ must be in RADIANS
The radian approximation • For small θ sin θ < θ < tan θ θ must be in RADIANS • For a small distance on the ground • The conversion between lat/long and X/Y is linear
Transverse Mercator revisited • There is an emerging standard, UTM • Universal Transverse Mercator • It is not UK-centric
Problem #2 • The world is flat round squashed
The Earth is an oblate spheroid • More like the shape of an apple than a ball • Instead of projecting onto a cylinder, we project on to an ellipsoid
To use UTM • You need to specify a datum • This includes an ellipsoid and offsets (false easting and false northing)
Geo::Coordinates::UTM • Takes an ellipsoid, not a datum • Hence no internal facility for false easting or false northing. • Non OO interface.
latlon_to_utm my ($zone,$east,$north) = latlon_to_utm ( 'clarke 1866', 98.251, 2.562);
utm_to_latlon my ($lat,$long) = utm_to_latlon ('clarke 1866', '30V', 12554, 41562);
Plug-ins for CGI::Wiki and OpenGuides • CGI::Wiki::Plugin::Locator::UK • CGI::Wiki::Plugin::Locator::UTM