Geo::Coordinates::UTM::XS - C/XS reimplementation of Geo::Coordinates::UTM


Geo-Coordinates-UTM-XS documentation Contained in the Geo-Coordinates-UTM-XS distribution.

Index


Code Index:

NAME

Top

Geo::Coordinates::UTM::XS - C/XS reimplementation of Geo::Coordinates::UTM

SYNOPSIS

Top

  # use Geo::Coordinates::UTM;
  use Geo::Coordinates::UTM::XS;
  ...

DESCRIPTION

Top

This module is a drop in replacement for Geo::Coordinates::UTM.

It's written in C/XS and around 10x-15x times faster than the Perl implementation.

SEE ALSO

Top

Read Geo::Coordinates::UTM to learn how to use this module.

BUGS

Top

Functions to convert coordinates to MGRS available from Geo::Coordinates::UTM 0.06 are not yet supported.

AUTHOR

Top

Salvador Fandiño <sfandino@yahoo.com>

COPYRIGHT AND LICENSE

Top


Geo-Coordinates-UTM-XS documentation Contained in the Geo-Coordinates-UTM-XS distribution.

package Geo::Coordinates::UTM::XS;

use strict;
use warnings;

use Carp;

BEGIN {

  our $VERSION = '0.04';

  require XSLoader;
  XSLoader::load('Geo::Coordinates::UTM::XS', $VERSION);

}

require Exporter;
our @ISA = qw(Exporter);
our @EXPORT  = qw( latlon_to_utm latlon_to_utm_force_zone utm_to_latlon
                   ellipsoid_info ellipsoid_names);

use Geo::Coordinates::UTM;

BEGIN {
    *_cleanup_name = \&Geo::Coordinates::UTM::_cleanup_name;
}

our %_ellipsoid;

my $i = 1;
for (ellipsoid_names) {
    $_ellipsoid{$_} = $i;
    $_ellipsoid{_cleanup_name($_)} = $i;
    # print "ellipsoid info $_: ", join(', ', ellipsoid_info($_)), "\n";
    _set_ellipsoid_info($i, (ellipsoid_info($_))[1,2]);
    $i++;
}

sub _ellipsoid_index {
    my $name = shift;
    my $index = $_ellipsoid{_cleanup_name($name)}
        or croak "bad ellipsoid name '$name'";
    $_ellipsoid{$name} = $index;
}

{
    no warnings;
    *latlon_to_utm = \&_latlon_to_utm;
    *latlon_to_utm_force_zone = \&_latlon_to_utm_force_zone;
    *utm_to_latlon = \&_utm_to_latlon;
}

1;
__END__