[gdal-dev] Re: Testing Geospatial PDF support

Even Rouault even.rouault at mines-paris.org
Thu Oct 21 14:46:36 EDT 2010


For those interested in this saga, with the help of Brent, the issue has been 
solved and is now fixed in trunk. This was an issue when dealing with multiple 
georeferencing bounding boxes in Adobe style encoding and/or when the bounding 
box doesn't cover the whole page area.

Le mardi 19 octobre 2010 22:54:28, Brent Fraser a écrit :
>   Evan,
> 
> For the original PDF, gdalinfo shows:
> 
> Driver: PDF/Geospatial PDF
> Files: my.pdf
> Size is 7487, 5229
> Coordinate System is:
> PROJCS["WGS_1984_UTM_Zone_35N",
>      GEOGCS["GCS_WGS_1984",
>          DATUM["WGS_1984",
>              SPHEROID["WGS_1984",6378137.0,298.257223563]],
>          PRIMEM["Greenwich",0.0],
>          UNIT["Degree",0.0174532925199433]],
>      PROJECTION["Transverse_Mercator"],
>      PARAMETER["False_Easting",500000.0],
>      PARAMETER["False_Northing",0.0],
>      PARAMETER["Central_Meridian",27.0],
>      PARAMETER["Scale_Factor",0.9996],
>      PARAMETER["Latitude_Of_Origin",0.0],
>      UNIT["Meter",1.0]]
> GeoTransform =
>    208685.3477667082, 91.60344342730002, -9.686865691546485e-005
>    4840743.141406364, -0.0003005644555746527, -103.1065102766238
> Corner Coordinates:
> Upper Left  (  208685.348, 4840743.141) ( 23d23'13.21"E, 43d39'45.29"N)
> Lower Left  (  208684.841, 4301599.199) ( 23d38'41.63"E, 38d48'54.07"N)
> Upper Right (  894520.329, 4840740.891) ( 31d53'20.40"E, 43d36'54.07"N)
> Lower Right (  894519.822, 4301596.949) ( 31d32'26.52"E, 38d46'29.57"N)
> Center      (  551602.585, 4571170.045) ( 27d36'58.63"E, 41d17'25.18"N)
> Band 1 Block=7487x1 Type=Byte, ColorInterp=Red
> Band 2 Block=7487x1 Type=Byte, ColorInterp=Green
> Band 3 Block=7487x1 Type=Byte, ColorInterp=Blue
> 
> 
> and the resulting Geotiff is:
> 
> Driver: GTiff/GeoTIFF
> Files: my.tif
> Size is 7487, 5229
> Coordinate System is:
> PROJCS["WGS 84 / UTM zone 35N",
>      GEOGCS["WGS 84",
>          DATUM["WGS_1984",
>              SPHEROID["WGS 84",6378137,298.257223563,
>                  AUTHORITY["EPSG","7030"]],
>              AUTHORITY["EPSG","6326"]],
>          PRIMEM["Greenwich",0],
>          UNIT["degree",0.0174532925199433],
>          AUTHORITY["EPSG","4326"]],
>      PROJECTION["Transverse_Mercator"],
>      PARAMETER["latitude_of_origin",0],
>      PARAMETER["central_meridian",27],
>      PARAMETER["scale_factor",0.9996],
>      PARAMETER["false_easting",500000],
>      PARAMETER["false_northing",0],
>      UNIT["metre",1,
>          AUTHORITY["EPSG","9001"]],
>      AUTHORITY["EPSG","32635"]]
> GeoTransform =
>    208685.3477667082, 91.60344342730002, -9.686865691546485e-005
>    4840743.141406364, -0.0003005644555746527, -103.1065102766238
> Metadata:
>    AREA_OR_POINT=Area
> Image Structure Metadata:
>    INTERLEAVE=PIXEL
> Corner Coordinates:
> Upper Left  (  208685.348, 4840743.141) ( 23d23'13.21"E, 43d39'45.29"N)
> Lower Left  (  208684.841, 4301599.199) ( 23d38'41.63"E, 38d48'54.07"N)
> Upper Right (  894520.329, 4840740.891) ( 31d53'20.40"E, 43d36'54.07"N)
> Lower Right (  894519.822, 4301596.949) ( 31d32'26.52"E, 38d46'29.57"N)
> Center      (  551602.585, 4571170.045) ( 27d36'58.63"E, 41d17'25.18"N)
> Band 1 Block=7487x1 Type=Byte, ColorInterp=Red
> Band 2 Block=7487x1 Type=Byte, ColorInterp=Green
> Band 3 Block=7487x1 Type=Byte, ColorInterp=Blue
> 
> 
> 
> After gdalwarp:
> 
> Driver: GTiff/GeoTIFF
> Files: gdalwarp.tif
> Size is 7179, 5644
> Coordinate System is:
> PROJCS["WGS 84 / UTM zone 35N",
>      GEOGCS["WGS 84",
>          DATUM["WGS_1984",
>              SPHEROID["WGS 84",6378137,298.257223563,
>                  AUTHORITY["EPSG","7030"]],
>              AUTHORITY["EPSG","6326"]],
>          PRIMEM["Greenwich",0],
>          UNIT["degree",0.0174532925199433],
>          AUTHORITY["EPSG","4326"]],
>      PROJECTION["Transverse_Mercator"],
>      PARAMETER["latitude_of_origin",0],
>      PARAMETER["central_meridian",27],
>      PARAMETER["scale_factor",0.9996],
>      PARAMETER["false_easting",500000],
>      PARAMETER["false_northing",0],
>      UNIT["metre",1,
>          AUTHORITY["EPSG","9001"]],
>      AUTHORITY["EPSG","32635"]]
> Origin = (208684.841232902890000,4840743.141386642100000)
> Pixel Size = (95.527649479168488,-95.527649479168488)
> Metadata:
>    AREA_OR_POINT=Area
> Image Structure Metadata:
>    INTERLEAVE=PIXEL
> Corner Coordinates:
> Upper Left  (  208684.841, 4840743.141) ( 23d23'13.19"E, 43d39'45.29"N)
> Lower Left  (  208684.841, 4301585.088) ( 23d38'41.65"E, 38d48'53.62"N)
> Upper Right (  894477.837, 4840743.141) ( 31d53'18.52"E, 43d36'54.23"N)
> Lower Right (  894477.837, 4301585.088) ( 31d32'24.76"E, 38d46'29.25"N)
> Center      (  551581.339, 4571164.115) ( 27d36'57.71"E, 41d17'24.99"N)
> Band 1 Block=7179x1 Type=Byte, ColorInterp=Red
> Band 2 Block=7179x1 Type=Byte, ColorInterp=Green
> Band 3 Block=7179x1 Type=Byte, ColorInterp=Blue
> 
> 
> Doing the math on a 1:75k map, at 150 dpi the pixel size should be about
> 12.7 meters.
> 
> Brent
> 
> On 10/19/2010 12:45 PM, Even Rouault wrote:
> > Brent,
> > 
> > I'm not sure what you find is wrong. What does gdalinfo returns ?
> > 
> > The PDF driver will reproject the coordinates of the GPTS array from
> > geographic into UTM 35N and try to build a geotransform matrix from that.
> > The matrix may have rotating terms, so you likely need to use gdalwarp
> > afterwards to make it look "straight". However I'm not 100% sure this is
> > the correct way to interpret the the Adobe style georeferencing, but I
> > didn't find a better one up to know. So if you or someone else have any
> > clue...
> > 
> > Most geospatial PDFs I've found in the wild (such as the one of cantopo)
> > seem to use the OGC Best Practice encoding.
> > 
> > Even
> > 
> > Le mardi 19 octobre 2010 20:11:13, Brent Fraser a écrit :
> >>    Even,
> >>    
> >>     I've tested a couple of Geospatial PDFs with the code that's in GDAL
> >> 
> >> trunk.
> >> 
> >> The Canadian topos work well (e.g.
> >> ftp://ftp2.cits.rncan.gc.ca/pub/cantopo/50k_geopdf/085/b/cantopo_085b14_
> >> geo pdf.zip). They were produced using ESRI ArcMap 9.2.6.1500.  I get a
> >> properly geo-referenced GeoTiff after running gdal_translate.
> >> 
> >>    I have another PDF produced by ArcMap10.0.0.2414.   It has a main map
> >> 
> >> and a keymap.  The strange thing is that even though the coordinate
> >> system is UTM Zone 35 , it has a transformation matrix with geographic
> >> 
> >> coordinates given.  Here's a portion of the "dump" file:
> >>    Item[4] : VP
> >>    
> >>     Type = array
> >>     
> >>      Item[0]:
> >>       Type = dictionary
> >>       
> >>        Item[0] : Name = ÿþI (string)
> >>        Item[1] : Measure
> >>        
> >>         Type = dictionary
> >>         
> >>          Item[0] : Subtype = GEO (name)
> >>          Item[1] : LPTS
> >>          
> >>           Type = array
> >>           
> >>            Item[0]: 0 (int)
> >>            Item[1]: 1 (int)
> >>            Item[2]: 0 (int)
> >>            Item[3]: 0 (int)
> >>            Item[4]: 1 (int)
> >>            Item[5]: 0 (int)
> >>            Item[6]: 1 (int)
> >>            Item[7]: 1 (int)
> >>          
> >>          Item[2] : GPTS
> >>          
> >>           Type = array
> >>           
> >>            Item[0]: 38.815000 (real)
> >>            Item[1]: 23.644900 (real)
> >>            Item[2]: 43.662600 (real)
> >>            Item[3]: 23.387000 (real)
> >>            Item[4]: 43.615000 (real)
> >>            Item[5]: 31.889000 (real)
> >>            Item[6]: 38.774900 (real)
> >>            Item[7]: 31.540700 (real)
> >>          
> >>          Item[3] : GCS
> >>          
> >>           Type = dictionary
> >>           
> >>            Item[0] : WKT =
> >> 
> >> PROJCS["WGS_1984_UTM_Zone_35N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",
> >> SPH
> >> EROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT
> >> ["De
> >> gree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER[
> >> "Fal
> >> se_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Centra
> >> l_Me
> >> ridian",27.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_O
> >> rigi n",0.0],UNIT["Meter",1.0]] (string)
> >> 
> >>            Item[1] : Type = PROJCS (name)
> >>          
> >>          Item[4] : Type = Measure (name)
> >>          Item[5] : Bounds
> >>          
> >>           Type = array
> >>           
> >>            Item[0]: 0 (int)
> >>            Item[1]: 1 (int)
> >>            Item[2]: 0 (int)
> >>            Item[3]: 0 (int)
> >>            Item[4]: 1 (int)
> >>            Item[5]: 0 (int)
> >>            Item[6]: 1 (int)
> >>            Item[7]: 1 (int)
> >>        
> >>        Item[2] : Type = Viewport (name)
> >>        Item[3] : BBox
> >>        
> >>         Type = array
> >>         
> >>          Item[0]: 3168 (int)
> >>          Item[1]: 2433 (int)
> >>          Item[2]: 3557 (int)
> >>          Item[3]: 2127 (int)
> >>      
> >>      Item[1]:
> >>       Type = dictionary
> >>       
> >>        Item[0] : Name = ÿþA (string)
> >>        Item[1] : Measure
> >>        
> >>         Type = dictionary
> >>         
> >>          Item[0] : Subtype = GEO (name)
> >>          Item[1] : LPTS
> >>          
> >>           Type = array
> >>           
> >>            Item[0]: 0 (int)
> >>            Item[1]: 1 (int)
> >>            Item[2]: 0 (int)
> >>            Item[3]: 0 (int)
> >>            Item[4]: 1 (int)
> >>            Item[5]: 0 (int)
> >>            Item[6]: 1 (int)
> >>            Item[7]: 1 (int)
> >>          
> >>          Item[2] : GPTS
> >>          
> >>           Type = array
> >>           
> >>            Item[0]: 40.190600 (real)
> >>            Item[1]: 26.279300 (real)
> >>            Item[2]: 40.767200 (real)
> >>            Item[3]: 26.273100 (real)
> >>            Item[4]: 40.769300 (real)
> >>            Item[5]: 27.212000 (real)
> >>            Item[6]: 40.192600 (real)
> >>            Item[7]: 27.210200 (real)
> >>          
> >>          Item[3] : GCS
> >>          
> >>           Type = dictionary
> >>           
> >>            Item[0] : WKT =
> >> 
> >> PROJCS["WGS_1984_UTM_Zone_35N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",
> >> SPH
> >> EROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT
> >> ["De
> >> gree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER[
> >> "Fal
> >> se_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Centra
> >> l_Me
> >> ridian",27.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_O
> >> rigi n",0.0],UNIT["Meter",1.0]] (string)
> >> 
> >>            Item[1] : Type = PROJCS (name)
> >>          
> >>          Item[4] : Type = Measure (name)
> >>          Item[5] : Bounds
> >>          
> >>           Type = array
> >>           
> >>            Item[0]: 0 (int)
> >>            Item[1]: 1 (int)
> >>            Item[2]: 0 (int)
> >>            Item[3]: 0 (int)
> >>            Item[4]: 1 (int)
> >>            Item[5]: 0 (int)
> >>            Item[6]: 1 (int)
> >>            Item[7]: 1 (int)
> >>        
> >>        Item[2] : Type = Viewport (name)
> >>        Item[3] : BBox
> >>        
> >>         Type = array
> >>         
> >>          Item[0]: 57 (int)
> >>          Item[1]: 2465 (int)
> >>          Item[2]: 3052 (int)
> >>          Item[3]: 46 (int)
> >> 
> >> ------------------------
> >> 
> >> The resulting GeoTiff has a scaling problem, I suspect related to the
> >> transformation matrix.
> >> 
> >> Any thoughts on that?
> >> 
> >> Thanks!
> >> Brent Fraser


More information about the gdal-dev mailing list