Ignore:
Timestamp:
Sep 17, 2006, 5:26:28 PM (15 years ago)
Author:
nick
Message:

Support doing Helmert Transforms as required, using the MySociety? Helmert transform library, if installed. References #89

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/OpenGuides/Utils.pm

    r867 r870  
    236236       or croak "No longitude supplied to get_wgs84_coords";
    237237    croak "geo_handler not defined!" unless $config->geo_handler;
     238
    238239    if ($config->force_wgs84) {
    239240        # Only as a rough approximation, good enough for large scale guides
    240241        return ($longitude, $latitude);
    241     } elsif ($config->geo_handler == 1) {
     242    }
     243
     244    # If we don't have a lat and long, return undef right away
     245    unless($args{longitude} || $args{latitude}) {
     246        return undef;
     247    }
     248
     249    # Try to load a provider of Helmert Transforms
     250    my $helmert;
     251    # First up, try the MySociety Geo::HelmertTransform
     252    unless($helmert) {
     253        eval {
     254            require Geo::HelmertTransform;
     255            $helmert = sub($$$) {
     256                my ($datum,$oldlat,$oldlong) = @_;
     257                my $datum_helper = Geo::HelmertTransform::datum($datum);
     258                my $wgs84_helper = Geo::HelmertTransform::datum('WGS84');
     259                unless($datum_helper) {
     260                    croak("No convertion helper for datum '$datum'");
     261                    return undef;
     262                }
     263
     264                my ($lat,$long,$h) =
     265                    Geo::HelmertTransform::convert_datum($datum_helper,$wgs84_helper,$oldlat,$oldlong,0);
     266                return ($long,$lat);
     267            };
     268        };
     269    }
     270    # Next, try .....
     271    unless($helmert) {
     272        eval {
     273        };
     274    }
     275    # Give up, return undef
     276    unless($helmert) {
     277       return undef;
     278    }
     279   
     280
     281    if ($config->geo_handler == 1) {
    242282        # Do conversion here
    243         return undef;
     283        return &$helmert('Airy1830',$latitude,$longitude);
    244284    } elsif ($config->geo_handler == 2) {
    245285        # Do conversion here
    246         return undef;
     286        return &$helmert('Airy1830Modified',$latitude,$longitude);
    247287    } elsif ($config->geo_handler == 3) {
    248288        if ($config->ellipsoid eq "WGS-84") {
     
    250290        } else {
    251291            # Do conversion here
    252             return undef;
     292            return &$helmert($config->ellipsoid,$latitude,$longitude);
    253293        }
    254294    } else {
Note: See TracChangeset for help on using the changeset viewer.