# URI::geo - URI scheme for geo Identifiers - perldoc - [phpMan]

## NAME
    [URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown) - URI scheme for geo Identifiers

## SYNOPSIS
      use URI;

      # Geo URI from textual uri
      my $guri = URI->new( 'geo:54.786989,-2.344214' );

      # From coordinates
      my $guri = [URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown)->new( 54.786989, -2.344214 );

      # Decode
      my ( $lat, $lon, $alt ) = $guri->location;
      my $latitude = $guri->latitude;

      # Update
      $guri->location( 55, -1 );
      $guri->longitude( -43.23 );

## DESCRIPTION
    From <<http://geouri.org/>>:

      More and more protocols and data formats are being extended by methods
      to add geographic information. However, all of those options are tied
      to that specific protocol or data format.

      A dedicated Uniform Resource Identifier (URI) scheme for geographic
      locations would be independent from any protocol, usable by any
      software/data format that can handle generich URIs. Like a "mailto:"
      URI launches your favourite mail application today, a "geo:" URI could
      soon launch your favourite mapping service, or queue that location for
      a navigation device.

## SUBROUTINES/METHODS
  "new"
    Create a new [URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown). The arguments should be either

    *   latitude, longitude and optionally altitude

    *   a reference to an array containing lat, lon, alt

    *   a reference to a hash with suitably named keys or

    *   a reference to an object with suitably named accessors

    To maximize the likelihood that you can pass in some object that represents a geographical
    location and have [URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown) do the right thing we try a number of different accessor names.

    If the object has a "latlong" method (e.g. [Geo::Point](https://www.chedong.com/phpMan.php/perldoc/Geo%3A%3APoint/markdown)) we'll use that. If there's a "location"
    method we call that. Otherwise we look for accessors called "lat", "latitude", "lon", "long",
    "longitude", "ele", "alt", "elevation" or "altitude" and use them.

    Often if you have an object or hash reference that represents a point you can pass it directly
    to "new"; so for example this will work:

      use [URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown);
      use [Geo::Point](https://www.chedong.com/phpMan.php/perldoc/Geo%3A%3APoint/markdown);

      my $pt = [Geo::Point](https://www.chedong.com/phpMan.php/perldoc/Geo%3A%3APoint/markdown)->latlong( 48.208333, 16.372778 );
      my $guri = [URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown)->new( $pt );

    As will this:

      my $guri = [URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown)->new( { lat => 55, lon => -1 } );

    and this:

      my $guri = [URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown)->new( 55, -1 );

    Note that you can also create a new "[URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown)" by passing a Geo URI to "[URI::new](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Anew/markdown)":

      use URI;

      my $guri = URI->new( 'geo:55,-1' );

  "location"
    Get or set the location of this geo URI.

      my ( $lat, $lon, $alt ) = $guri->location;
      $guri->location( 55.3, -3.7, 120 );

    When setting the location it is possible to pass any of the argument types that can be passed to
    "new".

  "latitude"
    Get or set the latitude of this geo URI.

  "longitude"
    Get or set the longitude of this geo URI.

  "altitude"
    Get or set the altitude <<https://en.wikipedia.org/wiki/Geo_URI_scheme#Altitude>> of this geo URI.
    To delete the altitude set it to "undef".

  "crs"
    Get or set the Coordinate Reference System
    <<https://en.wikipedia.org/wiki/Geo_URI_scheme#Coordinate_reference_systems>> of this geo URI. To
    delete the CRS set it to "undef".

  "uncertainty"
    Get or set the uncertainty <<https://en.wikipedia.org/wiki/Geo_URI_scheme#Uncertainty>> of this
    geo URI. To delete the uncertainty set it to "undef".

  "field"
## CONFIGURATION AND ENVIRONMENT
    [URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown) requires no configuration files or environment variables.

## DEPENDENCIES
    URI

## DIAGNOSTICS
    "Too many arguments"
        The new method can only accept three parameters; latitude, longitude and altitude.

    "Don't know how to convert point"
        The new method doesn't know how to convert the supplied parameters into a [URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown) object.

    "Need lat, lon or lat, lon, alt"
        The new method needs two (latitude and longitude) or three (latitude, longitude and
        altitude) parameters in a list. Any less or more than this is an error.

    "No such field: %s"
        This field is not a known field for the [URI::geo](https://www.chedong.com/phpMan.php/perldoc/URI%3A%3Ageo/markdown) object.

    "Badly formed geo uri"
        The URI cannot be parsed as a URI

    "Badly formed geo uri"
        The URI cannot be parsed as a URI

    "Latitude out of range"
        Latitude may only be from -90 to +90

    "Longitude out of range"
        Longitude may only be from -180 to +180

## INCOMPATIBILITIES
    None reported.

## BUGS AND LIMITATIONS
    To report a bug, or view the current list of bugs, please visit
    <<https://github.com/libwww-perl/URI/issues>>

## AUTHOR
    Andy Armstrong "<<andy@hexten.net>>"

## LICENSE AND COPYRIGHT
    Copyright (c) 2009, Andy Armstrong "<<andy@hexten.net>>".

    This module is free software; you can redistribute it and/or modify it under the same terms as
    Perl itself. See perlartistic.

