package Geo::JSON::CRS; our $VERSION = '0.007'; use Moo; with 'Geo::JSON::Role::ToJson'; use Types::Standard qw/ HashRef /; use Geo::JSON; has type => ( is => 'ro', required => 1, isa => sub { die "CRS type must be either 'name' or 'link'" unless $_[0] && ( $_[0] eq 'name' || $_[0] eq 'link' ); }, ); has properties => ( is => 'ro', isa => HashRef, required => 1 ); 1; __END__ =encoding utf-8 =head1 NAME Geo::JSON::CRS - Co-ordinate Reference System object =head1 SYNOPSIS use Geo::JSON::CRS; # A named CRS my $wgs84 = Geo::JSON::CRS->new( { type => 'name', properties => { name => 'urn:ogc:def:crs:OGC:1.3:CRS84' } } ); # older formats are also possible, e.g. "urn:ogc:def:crs:EPSG::4326" # A linked CRS my $crs = Geo::JSON::CRS->new( { type => 'link', properties => { href => 'http://example.com/crs/42', type => 'proj4' } } ); # A relative link my $crs = Geo::JSON::CRS->new( { type => 'link', properties => { href => 'data.crs', type => 'ogcwkt' } } ); =head1 DESCRIPTION Perl class to represent a Coordinate Reference System object. The default GeoJSON CRS "is a geographic coordinate reference system, using the WGS84 datum, and with longitude and latitude units of decimal degrees." Set a CRS value on a GeoJSON object to change this. See L for more details. =head1 ATTRIBUTES =head2 type Either 'name' or 'link' =head2 properties Hashref. For objects of type 'name', a 'name' key is required, the value being a string identifying the CRS. For objects of type 'link', 'href' and 'type' keys are required. Link types are not restricted, examples include "proj4", "ogcwkt", "esriwkt", =cut