365
483
} elsif ($param{Proj4}) {
366
484
ImportFromProj4($self, $param{Proj4});
367
485
} elsif ($param{ESRI}) {
368
ImportFromESRI($self, $param{ESRI});
486
ImportFromESRI($self, @{$param{ESRI}});
369
487
} elsif ($param{EPSG}) {
370
488
ImportFromEPSG($self, $param{EPSG});
489
} elsif ($param{EPSGA}) {
490
ImportFromEPSGA($self, $param{EPSGA});
371
491
} elsif ($param{PCI}) {
372
ImportFromPCI($self, $param{PCI});
492
ImportFromPCI($self, @{$param{PCI}});
373
493
} elsif ($param{USGS}) {
374
ImportFromUSGS($self, $param{USGS});
494
ImportFromUSGS($self, @{$param{USGS}});
375
495
} elsif ($param{XML}) {
376
496
ImportFromXML($self, $param{XML});
497
} elsif ($param{GML}) {
498
ImportFromGML($self, $param{GML});
499
} elsif ($param{URL}) {
500
ImportFromUrl($self, $param{URL});
501
} elsif ($param{ERMapper}) {
502
ImportFromERM($self, @{$param{ERMapper}} );
503
} elsif ($param{ERM}) {
504
ImportFromERM($self, @{$param{ERM}} );
505
} elsif ($param{MICoordSys}) {
506
ImportFromMICoordSys($self, $param{MICoordSys} );
507
} elsif ($param{MapInfoCS}) {
508
ImportFromMICoordSys($self, $param{MapInfoCS} );
510
croak "Unrecognized import format for Geo::OSR::SpatialReference.";
378
512
bless $self, $pkg if defined $self;
516
my $format = pop if @_ == 1;
518
$format = $params{to} unless $format;
519
$format = $params{format} unless $format;
520
$format = $params{as} unless $format;
521
if ($format eq 'WKT' or $format eq 'Text') {
522
return ExportToWkt($self);
523
} elsif ($format eq 'PrettyWKT') {
524
my $simplify = exists $params{simplify} ? $params{simplify} : 0;
525
return ExportToPrettyWkt($self, $simplify);
526
} elsif ($format eq 'Proj4') {
527
return ExportToProj4($self);
528
} elsif ($format eq 'PCI') {
529
return ExportToPCI($self);
530
} elsif ($format eq 'USGS') {
531
return ExportToUSGS($self);
532
} elsif ($format eq 'GML' or $format eq 'XML') {
533
my $dialect = exists $params{dialect} ? $params{dialect} : '';
534
return ExportToXML($self, $dialect);
535
} elsif ($format eq 'MICoordSys' or $format eq 'MapInfoCS') {
536
return ExportToMICoordSys();
538
croak "Unrecognized export format for Geo::OSR::SpatialReference.";
380
541
*AsText = *ExportToWkt;
544
my($self, %params) = @_;
545
if (exists $params{Authority} and exists $params{Node} and exists $params{Code}) {
546
SetAuthority($self, $params{TargetKey}, $params{Authority}, $params{Code});
547
} elsif (exists $params{Node} and exists $params{Value}) {
548
SetAttrValue($self, $params{Node}, $params{Value});
549
} elsif (exists $params{AngularUnits} and exists $params{Value}) {
550
SetAngularUnits($self, $params{AngularUnits}, $params{Value});
551
} elsif (exists $params{LinearUnits} and exists $params{Node} and exists $params{Value}) {
552
SetTargetLinearUnits($self, $params{Node}, $params{LinearUnits}, $params{Value});
553
} elsif (exists $params{LinearUnits} and exists $params{Value}) {
554
SetLinearUnitsAndUpdateParameters($self, $params{LinearUnits}, $params{Value});
555
} elsif ($params{CoordinateSystem} eq 'UTM' and exists $params{Zone} and exists $params{North}) {
556
my $north = exists $params{North} ? $params{North} : 1;
557
SetUTM($self, $params{Zone}, $north);
558
} elsif ($params{CoordinateSystem} eq 'State Plane' and exists $params{Zone}) {
559
my $NAD83 = exists $params{NAD83} ? $params{NAD83} : 1;
560
my $name = exists $params{UnitName} ? $params{UnitName} : undef;
561
my $c = exists $params{UnitConversionFactor} ? $params{UnitConversionFactor} : 0.0;
562
SetStatePlane($self, $params{Zone}, $NAD83, $name, $c);
563
} elsif ($params{Parameter} and exists $params{Value}) {
564
croak "unknown parameter: $params{Parameter}" unless exists $PARAMETERS{$params{Parameter}};
565
$params{Normalized} ?
566
SetNormProjParm($self, $params{Parameter}, $params{Value}) :
567
SetProjParm($self, $params{Parameter}, $params{Value});
568
} elsif ($params{Projection}) {
569
croak "unknown projection: $params{Projection}" unless exists $PROJECTIONS{$params{Projection}};
570
if (not $params{Parameters}) {
571
SetProjection($self, $PROJECTIONS{$params{Projection}});
572
} elsif ($params{Projection} eq 'ALBERS_CONIC_EQUAL_AREA' and $params{Parameters}) {
573
SetACEA($self, @{$params{Parameters}});
574
} elsif ($params{Projection} eq 'AZIMUTHAL_EQUIDISTANT' and $params{Parameters}) {
575
SetAE($self, @{$params{Parameters}});
576
} elsif ($params{Projection} eq 'BONNE' and $params{Parameters}) {
577
SetBonne($self, @{$params{Parameters}});
578
} elsif ($params{Projection} eq 'CYLINDRICAL_EQUAL_AREA' and $params{Parameters}) {
579
SetCEA($self, @{$params{Parameters}});
580
} elsif ($params{Projection} eq 'CASSINI_SOLDNER' and $params{Parameters}) {
581
SetCS($self, @{$params{Parameters}});
582
} elsif ($params{Projection} eq 'EQUIDISTANT_CONIC' and $params{Parameters}) {
583
SetEC($self, @{$params{Parameters}});
584
} elsif ($params{Projection} eq 'ECKERT_IV' and $params{Parameters}) {
585
SetEckertIV($self, @{$params{Parameters}});
586
} elsif ($params{Projection} eq 'ECKERT_VI' and $params{Parameters}) {
587
SetEckertVI($self, @{$params{Parameters}});
588
} elsif ($params{Projection} eq 'EQUIRECTANGULAR' and $params{Parameters}) {
589
@{$params{Parameters}} == 4 ?
590
SetEquirectangular($self, @{$params{Parameters}}) :
591
SetEquirectangular2($self, @{$params{Parameters}});
592
} elsif ($params{Projection} eq 'GAUSSSCHREIBERTMERCATOR' and $params{Parameters}) {
593
SetGaussSchreiberTMercator($self, @{$params{Parameters}});
594
} elsif ($params{Projection} eq 'GALL_STEREOGRAPHIC' and $params{Parameters}) {
595
SetGS($self, @{$params{Parameters}});
596
} elsif ($params{Projection} eq 'GOODE_HOMOLOSINE' and $params{Parameters}) {
597
SetGH($self, @{$params{Parameters}});
598
} elsif ($params{Projection} eq 'IGH') {
600
} elsif ($params{Projection} eq 'GEOSTATIONARY_SATELLITE' and $params{Parameters}) {
601
SetGEOS($self, @{$params{Parameters}});
602
} elsif ($params{Projection} eq 'GNOMONIC' and $params{Parameters}) {
603
SetGnomonic($self, @{$params{Parameters}});
604
} elsif ($params{Projection} eq 'HOTINE_OBLIQUE_MERCATOR' and $params{Parameters}) {
605
SetHOM($self, @{$params{Parameters}});
606
} elsif ($params{Projection} eq 'HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN' and $params{Parameters}) {
607
SetHOM2PNO($self, @{$params{Parameters}});
608
} elsif ($params{Projection} eq 'KROVAK' and $params{Parameters}) {
609
SetKrovak($self, @{$params{Parameters}});
610
} elsif ($params{Projection} eq 'LAMBERT_AZIMUTHAL_EQUAL_AREA' and $params{Parameters}) {
611
SetLAEA($self, @{$params{Parameters}});
612
} elsif ($params{Projection} eq 'LAMBERT_CONFORMAL_CONIC_2SP' and $params{Parameters}) {
613
SetLCC($self, @{$params{Parameters}});
614
} elsif ($params{Projection} eq 'LAMBERT_CONFORMAL_CONIC_1SP' and $params{Parameters}) {
615
SetLCC1SP($self, @{$params{Parameters}});
616
} elsif ($params{Projection} eq 'LAMBERT_CONFORMAL_CONIC_2SP_BELGIUM' and $params{Parameters}) {
617
SetLCCB($self, @{$params{Parameters}});
618
} elsif ($params{Projection} eq 'MILLER_CYLINDRICAL' and $params{Parameters}) {
619
SetMC($self, @{$params{Parameters}});
620
} elsif ($params{Projection} =~ /^MERCATOR/ and $params{Parameters}) {
621
SetMercator($self, @{$params{Parameters}});
622
} elsif ($params{Projection} eq 'MOLLWEIDE' and $params{Parameters}) {
623
SetMollweide($self, @{$params{Parameters}});
624
} elsif ($params{Projection} eq 'NEW_ZEALAND_MAP_GRID' and $params{Parameters}) {
625
SetNZMG($self, @{$params{Parameters}});
626
} elsif ($params{Projection} eq 'OBLIQUE_STEREOGRAPHIC' and $params{Parameters}) {
627
SetOS($self, @{$params{Parameters}});
628
} elsif ($params{Projection} eq 'ORTHOGRAPHIC' and $params{Parameters}) {
629
SetOrthographic($self, @{$params{Parameters}});
630
} elsif ($params{Projection} eq 'POLYCONIC' and $params{Parameters}) {
631
SetPolyconic($self, @{$params{Parameters}});
632
} elsif ($params{Projection} eq 'POLAR_STEREOGRAPHIC' and $params{Parameters}) {
633
SetPS($self, @{$params{Parameters}});
634
} elsif ($params{Projection} eq 'ROBINSON' and $params{Parameters}) {
635
SetRobinson($self, @{$params{Parameters}});
636
} elsif ($params{Projection} eq 'SINUSOIDAL' and $params{Parameters}) {
637
SetSinusoidal($self, @{$params{Parameters}});
638
} elsif ($params{Projection} eq 'STEREOGRAPHIC' and $params{Parameters}) {
639
SetStereographic($self, @{$params{Parameters}});
640
} elsif ($params{Projection} eq 'SWISS_OBLIQUE_CYLINDRICAL' and $params{Parameters}) {
641
SetSOC($self, @{$params{Parameters}});
642
} elsif ($params{Projection} eq 'TRANSVERSE_MERCATOR_SOUTH_ORIENTED' and $params{Parameters}) {
643
SetTMSO($self, @{$params{Parameters}});
644
} elsif ($params{Projection} =~ /^TRANSVERSE_MERCATOR/ and $params{Parameters}) {
645
my($variant) = $params{Projection} =~ /^TRANSVERSE_MERCATOR_(\w+)/;
646
$variant = $params{Name} unless $variant;
648
SetTMVariant($self, $variant, @{$params{Parameters}}) :
649
SetTM($self, @{$params{Parameters}});
650
} elsif ($params{Projection} eq 'TUNISIA_MINING_GRID' and $params{Parameters}) {
651
SetTMG($self, @{$params{Parameters}});
652
} elsif ($params{Projection} eq 'VANDERGRINTEN' and $params{Parameters}) {
653
SetVDG($self, @{$params{Parameters}});
654
} elsif ($params{Name}) {
655
SetWellKnownGeogCS($self, $params{Name});
656
} elsif ($params{GuessFrom}) {
657
SetFromUserInput($self, $params{GuessFrom});
658
} elsif ($params{CoordinateSystem} eq 'WGS' and $params{Parameters}) {
659
SetTOWGS84($self, @{$params{Parameters}});
660
} elsif ($params{LOCAL_CS}) {
661
SetLocalCS($self, $params{LOCAL_CS});
662
} elsif ($params{CoordinateSystem} and $params{Datum} and $params{Spheroid} and $params{Parameters}) {
663
SetGeogCS($self, $params{CoordinateSystem}, $params{Datum}, $params{Spheroid}, @{$params{Parameters}});
664
} elsif ($params{CoordinateSystem}) {
665
SetProjCS($self, $params{CoordinateSystem});
666
} elsif ($params{GeocentricCS}) {
667
SetGeocCS($self, $params{GeocentricCS});
668
} elsif ($params{VerticalCS} and $params{Datum}) {
669
my $type = $params{VertDatumType} || 2005;
670
SetVertCS($self, $params{VerticalCS}, $params{Datum}, $type);
671
} elsif ($params{CoordinateSystem} and $params{HorizontalCS} and $params{VerticalCS}) {
672
SetCompoundCS($self, $params{CoordinateSystem}, $params{HorizontalCS}, $params{VerticalCS});
674
croak "Not enough information to set anything in a spatial reference object.";
680
my $zone = _GetUTMZone($self);
687
return ($zone, $north);
693
package Geo::OSR::CoordinateTransformation;
695
sub TransformPoints {
696
my($self, $points) = @_;
697
_TransformPoints($self, $points), return unless ref($points->[0]->[0]);
698
for my $p (@$points) {
699
TransformPoints($self, $p);