Re: [gdal-dev] Splitting and projecting a large .sid image

2009-03-19 Thread Chaitanya kumar CH
Steve,

The -te option mentions the extents of the output file, not the input
file. As of now there is no option in gdalwrap to specify the input
file extents.

Regards,
-- 
Chaitanya kumar CH.

On Thu, Mar 19, 2009 at 10:44 PM, Stephen Woodbridge
wood...@swoodbridge.com wrote:
 Hi all,

 This is my annual wake-up got to do something with rasters and forgot the
 finer details of the last time I did a problem similar to it.

 I have a bunch of LandSat mrsid imagery, they are in multiple UTM zone
 projections and I want to convert them to geographic projection, WGS84, and
 into tiff files. The files are too large to convert into a single tif, so I
 plan to quarter each file into 4 pieces.

 So I wrote a script the reads the files and collects info about them, then
 generates 4 gdalwarp commands to reproject each quarter of the file (perl
 included below). A typical command looks like:

 gdalwarp -srcnodata 0 -dstnodata 0 -s_srs +init=epsg:32642 -t_srs EPSG:4326
 -te 68.676729652 24.9707453133203 72.7715338115736 27.4799559407707 -rb
 -wm 250 --config GDAL_ONE_BIG_READ ON -co TILED=YES
 ./GeoCover2000/n-42-25.sid ./af/n-42-25_1-0.tif


 The reprojection seems to have worked fine, but the bounds seem to be off
 because of the black (nodata) areas.

 You can see my poor results here:
 http://imaptools.com/downloads/raster.gif

 Is there a better way to do this? I seem to remember a tool to generate
 tiles.
 Does this need to be done in two steps? How?
 Did I mess up my logic below? I've been over it multiple times and do not
 see any errors.

 Any help would be appreciated.

 Thanks,
  -Steve

 $ gdalinfo -nomd ./GeoCover2000/n-42-25.sid
 Driver: MrSID/Multi-resolution Seamless Image Database (MrSID)
 Files: ./GeoCover2000/n-42-25.sid
 Size is 51078, 39090
 Coordinate System is `'
 Origin = (136066.125,3323577.375)
 Pixel Size = (14.250,-14.250)
 Corner Coordinates:
 Upper Left  (  136066.125, 3323577.375)
 Lower Left  (  136066.125, 2766544.875)
 Upper Right (  863927.625, 3323577.375)
 Lower Right (  863927.625, 2766544.875)
 Center      (  46.875, 3045061.125)
 Band 1 Block=1024x128 Type=Byte, ColorInterp=Red
  Minimum=0.000, Maximum=226.000, Mean=109.610, StdDev=39.202
  Overviews: 25539x19545, 12770x9773, 6385x4887, 3193x2444, 1597x1222,
 799x611, 400x306, 200x153
 Band 2 Block=1024x128 Type=Byte, ColorInterp=Green
  Minimum=0.000, Maximum=229.000, Mean=125.833, StdDev=31.828
  Overviews: 25539x19545, 12770x9773, 6385x4887, 3193x2444, 1597x1222,
 799x611, 400x306, 200x153
 Band 3 Block=1024x128 Type=Byte, ColorInterp=Blue
  Minimum=0.000, Maximum=227.000, Mean=107.092, StdDev=37.230
  Overviews: 25539x19545, 12770x9773, 6385x4887, 3193x2444, 1597x1222,
 799x611, 400x306, 200x153


 $ cat ./GeoCover2000/n-42-25.prj
 Projection     UTM
 Datum          WGS84
 Zunits         NO
 Units          METERS
 Zone           42
 Xshift         0.00
 Yshift         0.00
 Parameters



 Perl snippet:

    foreach my $sid (@files) {

        next unless $wanted  $sid =~ /$wanted/i;

        if (! -r $sid) {
            warn SKIPPING: $sid is not readable!\n;
            next;
        }

        my $gdalinfo = `gdalinfo -nomd $sid`;

        # parse out the strings that we need

        $gdalinfo =~ /Upper Left  \((\s*[^,]+),\s*([^\)]+)/s || warn Upper
 Left parse error\n;
        my $ul = [$1, $2];
        $gdalinfo =~ /Lower Left  \((\s*[^,]+),\s*([^\)]+)/s || warn Lower
 Left parse error\n;
        my $ll = [$1, $2];
        $gdalinfo =~ /Upper Right \((\s*[^,]+),\s*([^\)]+)/s || warn Upper
 Right error\n;
        my $ur = [$1, $2];
        $gdalinfo =~ /Lower Right \((\s*[^,]+),\s*([^\)]+)/s || warn Lower
 Right error\n;
        my $lr = [$1, $2];

        my $outf = $sid;
        $outf =~ s/\.sid//;
        $outf =~ m/\/([^\/]+)$/;
        $outf = $1;

        my $prj = $sid;
        $prj =~ s/\.sid/.prj/;
        if (! -r $prj) {
            warn SKIPPING: $prj is not readable!\n;
            next;
        }
        my $projinfo = `grep Zone $prj`;
        if ($projinfo =~ /^Zone\s*([-+]?\d+)/) {
            my $znum = $1;
            if ($znum  0) {
                $epsg = 32700 - $znum;
            } else {
                $epsg = 32600 + $znum;
            }
        }
        else {
            warn SKIPPING:  could not find zone or epsg in $prj\n;
            next;
        }

        my $proj = sprintf(+init=epsg:%d, $epsg);
        print Using projection: $proj for $projinfo if $DEBUG;

        my $pj = Geo::Proj4-new($proj);
        if (! $pj) {
            warn SKIPPING: Geo::Proj4 error:  . Geo::Proj4-error . \n;
            next;
        }

        $ul = [reverse $pj-inverse(@$ul)];
        $ll = [reverse $pj-inverse(@$ll)];
        $ur = [reverse $pj-inverse(@$ur)];
        $lr = [reverse $pj-inverse(@$lr)];

        # this is probably a parallelgram in latlong
        if ($DEBUG) {
            printf(ul = %11.6f, %11.6f\n, @$ul);
            

Re: [gdal-dev] Splitting and projecting a large .sid image

2009-03-19 Thread Brent Fraser

Steve,

 My general strategy when doing this (on terabytes of raster data) is:

1. Create a tileindex of input data.
Since you've got multiple zones of raster data, you'll need to create one 
tileindex for each zone (using gdaltindex), de-project them to geographic, and 
concatenate them (use ogr2ogr or PostGIS).

2. Create a geographic tileindex of output files (via your own script)
The size, extents, and amount of overlap are up to you.  It doesn't have to be 
a tileindex; it could be just a list of extents for use in steps 3 and 5 below.

3. Do a spatial select for each output tile on the input tileindex to create a 
mini tileindex for each output tile.
I use a hacked version of shputils to do this, but I expect PostGIS or ogr2ogr 
+ SQL would be a better way to go.

4. Convert all the mini tileindexes to vrt files (see the new gdalbuildvrt app!)

5  Use gdal_translate with the extents from step 2 to extract the output tile 
pixels from its corresponding vrt.

Convoluted yes, but very scalable.  And no Null pixels in the output tiles.

Brent Fraser
GeoAnalytic Inc.


Stephen Woodbridge wrote:

Hi all,

This is my annual wake-up got to do something with rasters and forgot 
the finer details of the last time I did a problem similar to it.


I have a bunch of LandSat mrsid imagery, they are in multiple UTM zone 
projections and I want to convert them to geographic projection, WGS84, 
and into tiff files. The files are too large to convert into a single 
tif, so I plan to quarter each file into 4 pieces.


So I wrote a script the reads the files and collects info about them, 
then generates 4 gdalwarp commands to reproject each quarter of the file 
(perl included below). A typical command looks like:


gdalwarp -srcnodata 0 -dstnodata 0 -s_srs +init=epsg:32642 -t_srs 
EPSG:4326 -te 68.676729652 24.9707453133203 72.7715338115736 
27.4799559407707 -rb -wm 250 --config GDAL_ONE_BIG_READ ON -co 
TILED=YES ./GeoCover2000/n-42-25.sid ./af/n-42-25_1-0.tif



The reprojection seems to have worked fine, but the bounds seem to be 
off because of the black (nodata) areas.


You can see my poor results here:
http://imaptools.com/downloads/raster.gif

Is there a better way to do this? I seem to remember a tool to generate 
tiles.

Does this need to be done in two steps? How?
Did I mess up my logic below? I've been over it multiple times and do 
not see any errors.


Any help would be appreciated.

Thanks,
  -Steve

$ gdalinfo -nomd ./GeoCover2000/n-42-25.sid
Driver: MrSID/Multi-resolution Seamless Image Database (MrSID)
Files: ./GeoCover2000/n-42-25.sid
Size is 51078, 39090
Coordinate System is `'
Origin = (136066.125,3323577.375)
Pixel Size = (14.250,-14.250)
Corner Coordinates:
Upper Left  (  136066.125, 3323577.375)
Lower Left  (  136066.125, 2766544.875)
Upper Right (  863927.625, 3323577.375)
Lower Right (  863927.625, 2766544.875)
Center  (  46.875, 3045061.125)
Band 1 Block=1024x128 Type=Byte, ColorInterp=Red
  Minimum=0.000, Maximum=226.000, Mean=109.610, StdDev=39.202
  Overviews: 25539x19545, 12770x9773, 6385x4887, 3193x2444, 1597x1222, 
799x611, 400x306, 200x153

Band 2 Block=1024x128 Type=Byte, ColorInterp=Green
  Minimum=0.000, Maximum=229.000, Mean=125.833, StdDev=31.828
  Overviews: 25539x19545, 12770x9773, 6385x4887, 3193x2444, 1597x1222, 
799x611, 400x306, 200x153

Band 3 Block=1024x128 Type=Byte, ColorInterp=Blue
  Minimum=0.000, Maximum=227.000, Mean=107.092, StdDev=37.230
  Overviews: 25539x19545, 12770x9773, 6385x4887, 3193x2444, 1597x1222, 
799x611, 400x306, 200x153



$ cat ./GeoCover2000/n-42-25.prj
Projection UTM
Datum  WGS84
Zunits NO
Units  METERS
Zone   42
Xshift 0.00
Yshift 0.00
Parameters



Perl snippet:

foreach my $sid (@files) {

next unless $wanted  $sid =~ /$wanted/i;

if (! -r $sid) {
warn SKIPPING: $sid is not readable!\n;
next;
}

my $gdalinfo = `gdalinfo -nomd $sid`;

# parse out the strings that we need

$gdalinfo =~ /Upper Left  \((\s*[^,]+),\s*([^\)]+)/s || warn 
Upper Left parse error\n;

my $ul = [$1, $2];
$gdalinfo =~ /Lower Left  \((\s*[^,]+),\s*([^\)]+)/s || warn 
Lower Left parse error\n;

my $ll = [$1, $2];
$gdalinfo =~ /Upper Right \((\s*[^,]+),\s*([^\)]+)/s || warn 
Upper Right error\n;

my $ur = [$1, $2];
$gdalinfo =~ /Lower Right \((\s*[^,]+),\s*([^\)]+)/s || warn 
Lower Right error\n;

my $lr = [$1, $2];

my $outf = $sid;
$outf =~ s/\.sid//;
$outf =~ m/\/([^\/]+)$/;
$outf = $1;

my $prj = $sid;
$prj =~ s/\.sid/.prj/;
if (! -r $prj) {
warn SKIPPING: $prj is not readable!\n;
next;
}
my $projinfo = `grep Zone $prj`;
if ($projinfo =~ /^Zone\s*([-+]?\d+)/) {
my $znum = $1;
if ($znum  0) {

Re: [gdal-dev] Splitting and projecting a large .sid image

2009-03-19 Thread Stephen Woodbridge

Brent Fraser wrote:

Steve,

 My general strategy when doing this (on terabytes of raster data) is:

1. Create a tileindex of input data.
Since you've got multiple zones of raster data, you'll need to create 
one tileindex for each zone (using gdaltindex), de-project them to 
geographic, and concatenate them (use ogr2ogr or PostGIS).


Turns out I already had a set of de-projected bboxes for each image 
file. I was going to do this when I found the shapefiles.



2. Create a geographic tileindex of output files (via your own script)
The size, extents, and amount of overlap are up to you.  It doesn't have 
to be a tileindex; it could be just a list of extents for use in steps 3 
and 5 below.


3. Do a spatial select for each output tile on the input tileindex to 
create a mini tileindex for each output tile.
I use a hacked version of shputils to do this, but I expect PostGIS or 
ogr2ogr + SQL would be a better way to go.


I loaded the geographic shapefiles into postgis along with my country 
boundary polygon and used that to select the tiles the intersected it.


4. Convert all the mini tileindexes to vrt files (see the new 
gdalbuildvrt app!)


Oh, I have not seen this. but this is a good idea. I have not use vrt 
files much, I need to get them into my thought process.


5  Use gdal_translate with the extents from step 2 to extract the output 
tile pixels from its corresponding vrt.


H, where do you reproject the raster images? I thought you had to 
use gdalwarp for that. Or is that step 6?


Convoluted yes, but very scalable.  And no Null pixels in the output 
tiles.


This would be good considering that the tif files are about 1.5-1.7GB each.

-Steve


Brent Fraser
GeoAnalytic Inc.


Stephen Woodbridge wrote:

Hi all,

This is my annual wake-up got to do something with rasters and forgot 
the finer details of the last time I did a problem similar to it.


I have a bunch of LandSat mrsid imagery, they are in multiple UTM zone 
projections and I want to convert them to geographic projection, 
WGS84, and into tiff files. The files are too large to convert into a 
single tif, so I plan to quarter each file into 4 pieces.


So I wrote a script the reads the files and collects info about them, 
then generates 4 gdalwarp commands to reproject each quarter of the 
file (perl included below). A typical command looks like:


gdalwarp -srcnodata 0 -dstnodata 0 -s_srs +init=epsg:32642 -t_srs 
EPSG:4326 -te 68.676729652 24.9707453133203 72.7715338115736 
27.4799559407707 -rb -wm 250 --config GDAL_ONE_BIG_READ ON -co 
TILED=YES ./GeoCover2000/n-42-25.sid ./af/n-42-25_1-0.tif



The reprojection seems to have worked fine, but the bounds seem to be 
off because of the black (nodata) areas.


You can see my poor results here:
http://imaptools.com/downloads/raster.gif

Is there a better way to do this? I seem to remember a tool to 
generate tiles.

Does this need to be done in two steps? How?
Did I mess up my logic below? I've been over it multiple times and do 
not see any errors.


Any help would be appreciated.

Thanks,
  -Steve

$ gdalinfo -nomd ./GeoCover2000/n-42-25.sid
Driver: MrSID/Multi-resolution Seamless Image Database (MrSID)
Files: ./GeoCover2000/n-42-25.sid
Size is 51078, 39090
Coordinate System is `'
Origin = (136066.125,3323577.375)
Pixel Size = (14.250,-14.250)
Corner Coordinates:
Upper Left  (  136066.125, 3323577.375)
Lower Left  (  136066.125, 2766544.875)
Upper Right (  863927.625, 3323577.375)
Lower Right (  863927.625, 2766544.875)
Center  (  46.875, 3045061.125)
Band 1 Block=1024x128 Type=Byte, ColorInterp=Red
  Minimum=0.000, Maximum=226.000, Mean=109.610, StdDev=39.202
  Overviews: 25539x19545, 12770x9773, 6385x4887, 3193x2444, 1597x1222, 
799x611, 400x306, 200x153

Band 2 Block=1024x128 Type=Byte, ColorInterp=Green
  Minimum=0.000, Maximum=229.000, Mean=125.833, StdDev=31.828
  Overviews: 25539x19545, 12770x9773, 6385x4887, 3193x2444, 1597x1222, 
799x611, 400x306, 200x153

Band 3 Block=1024x128 Type=Byte, ColorInterp=Blue
  Minimum=0.000, Maximum=227.000, Mean=107.092, StdDev=37.230
  Overviews: 25539x19545, 12770x9773, 6385x4887, 3193x2444, 1597x1222, 
799x611, 400x306, 200x153



$ cat ./GeoCover2000/n-42-25.prj
Projection UTM
Datum  WGS84
Zunits NO
Units  METERS
Zone   42
Xshift 0.00
Yshift 0.00
Parameters



Perl snippet:

foreach my $sid (@files) {

next unless $wanted  $sid =~ /$wanted/i;

if (! -r $sid) {
warn SKIPPING: $sid is not readable!\n;
next;
}

my $gdalinfo = `gdalinfo -nomd $sid`;

# parse out the strings that we need

$gdalinfo =~ /Upper Left  \((\s*[^,]+),\s*([^\)]+)/s || warn 
Upper Left parse error\n;

my $ul = [$1, $2];
$gdalinfo =~ /Lower Left  \((\s*[^,]+),\s*([^\)]+)/s || warn 
Lower Left parse error\n;

my $ll = [$1, $2];
$gdalinfo =~ 

Re: [gdal-dev] Splitting and projecting a large .sid image

2009-03-19 Thread Brent Fraser
 5  Use gdal_translate with the extents from step 2 to extract the output
 tile pixels from its corresponding vrt.

 H, where do you reproject the raster images? I thought you had to
 use gdalwarp for that. Or is that step 6?

Oops.  Yep, use gdalwarp (I was looking at my DEM processing script; its
geo-to-geo).

Brent

___
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev