Transforming a dataset

The code here does not have any warranty. It is recommended that before using any of this code, you look into it and try to understand what it does, what input it needs, etc. Do not blindly execute anything!

This example will transform a vector dataset from spatial reference system EPSG 2392 to EPSG 2393. The geometries are translated by (dx, dy) = (2500000, 6600000) before applying the transformation.

use Geo::GDAL;

$dsname = shift @ARGV;
$lname = shift @ARGV;

$datasource = Geo::OGR::Open($dsname) or die;
$layer1 = $datasource->Layer($lname) or die;
$sr1 = Geo::OSR::SpatialReference->create(EPSG => 2392);

$dsname = shift @ARGV;
$lname = shift @ARGV;

$datasource = Geo::OGR::Driver('ESRI Shapefile')->Create($dsname) or die;
$sr2 = Geo::OSR::SpatialReference->create(EPSG => 2393);
$layer2 = $datasource->CreateLayer
    ({ Name => $lname, SRS => $sr2, GeometryType => $layer1->GetLayerDefn->GeometryType});
$layer2->Schema( $layer1->Schema );

$tr = Geo::OSR::CoordinateTransformation->new($sr1, $sr2) or die;

$layer1->ResetReading();
while ($feature = $layer1->GetNextFeature()) {
    my $geom = $feature->GetGeometry();
    $geom->Move(2500000, 6600000);
    $geom->Transform($tr);
    $layer2->InsertFeature($feature);    
}

Generated on 26 May 2013 for Geo::GDAL by  doxygen 1.4.7