[gdal-dev] extract vector/raster data from GeoPDF

Brent Fraser bfraser at geoanalytic.com
Thu Sep 3 11:08:21 EDT 2009


Joaquim,

   Interesting! As Peter pointed out, the LPTS tag is the transformation matrix 
to go from projected coords to page coords, and is created by forming the 
UTM->page coordinates tranformation (from the information in the CTM tag below) 
and inverting it (there's a brief mention near the end of 
http://geopdf.blogspot.com/2009/02/georegistration-worked-example.html)

   Since the TerraGo way has been superceded by the Adobe/ISO way (thank 
goodness!), it makes it easier to identify the reference system definition in 
GDAL, so there may be some hope for GDAL and GeoPDF.

   Now I need to think about my requirements for reading and writing GeoPDFs. 
Write a Postscript driver for GDAL?   Figure out how to write the equivalent 
info into a PDF using Mapserver/Cairo?  Yikes!

Thanks,
Brent

Joaquim Luis wrote:
> Brent,
> 
> I was also digging a bit on this matter. It's true that the blogger only 
> opens
> our appetite as there is no more details on how to do it generally. I 
> mean, for
> UTM maps it has become fairly obvious how one can do it. The relevant 
> part in the
> PS file is
> 
> [ {ThisPage} <<
> /LGIDict <<
>   /Description Title
>   /CTM [(35.28267) (0) (0) (35.28267) (205188.64) (3207094.8)]
>   /Projection <<
>     /Description (WGS 84 UTM 16N)
>     /ProjectionType (TC)
>     /Datum (WGE)
>     /CentralMeridian (-87.0)
>     /OriginLatitude (0.0)
>     /FalseEasting (500000.0)
>     /FalseNorthing (0.0)
>     /ScaleFactor (0.999600)
>     /Type /Projection
>    >>
>    /Type /LGIDict
>    /Version (2.1)
>> >
>> > /PUT pdfmark
> 
> However, there is no more info on how to program in this "TerraGo way"
> A next post shads a bit more lite on the matter.
> http://geopdf.blogspot.com/2009/02/geopdf-and-geops-with-adobe-style.html
> As you can see in the quada.ps file there is an alternative "Adobe way",
> which encodes the referencing as
> 
> % embed georegistation info
> [ {ThisPage} <<
>   /VP [ <<
>     /Type /Viewport
>     /BBox[0 0 dh dv]
>     /Name Title
>     /Measure <<
>       /Type /Measure
>       /Subtype /GEO
>       /Bounds[0 0 0 1 1 1 1 0]
>       /GPTS[29.0 -90.0 30.0 -90.0 30.0 -89.0 29.0 -89.0]
>       /LPTS[0.024324 0.039461 0.051689 0.978774 0.975675 0.961136 
> 0.957432 0.022122]
>       /GCS <<
>         /Type /PROJCS
>         /WKT 
> (PROJCS["WGS_1984_UTM_Zone_16N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]) 
> 
>       >>
>     >>
>   >>]
>> > /PUT pdfmark
> 
> Now this is more familiar, except for the
> /LPTS[0.024324 0.039461 0.051689 0.978774 0.975675 0.961136 0.957432 
> 0.022122]
> part that, contrary to the promise has not been explained where it comes 
> from.
> 
> I think I could implement the first encoding type in GMT's ps2raster (if 
> I knew all the specs)
> Second type would be even easier ... if we had a way to translate the 
> GMT projection syntax into
> WKT, which we don't.
> 
> Joaquim
> 
> 
>> Joaquim,
>>
>>   Doing the format conversion from .ps to pdf is one thing (and there 
>> are several ways to do it), but embedding the georeferencing in the 
>> PDF to make it a GeoPDF is the interesting bit.  I haven't found any 
>> open source project capable of do that.  Or even capable of writing 
>> the PDF elements (e.g. Frames) necessary for writing the GeoPDF 
>> information.  But I remain hopeful...
>>
>> Brent
>>
>> Joaquim Luis wrote:
>>> Brent Fraser wrote:
>>>> I see the example calculation of the transformation matrix, and a 
>>>> statement "I created a GeoPDF by running the Postscript file through 
>>>> Ghostscript to create a Postscript file that looks like this"
>>>>
>>>> But I don't see where the georeferencing is written into PDF to make 
>>>> it a GeoPDF.  Is it a Ghostscript command line?
>>>
>>> Brent,
>>>
>>> One only has to convert it to pdf using ghostscript.
>>> I did it with GMT's ps2raster, like that
>>>
>>> ps2raster quad.ps -Tf -A
>>>
>>> Joaquim Luis
>>>
>>>>
>>>> Brent
>>>>
>>>> Klokan Petr Přidal wrote:
>>>>> Hi,
>>>>>
>>>>> There is a great blog post (and the linked "worked example" post 
>>>>> with details):
>>>>> http://geopdf.blogspot.com/2009/02/geopdf-map-for-worked-example.html
>>>>>
>>>>> It shows you how to create geopdf via GhostScript - so there is
>>>>> already a practical open-source example how to encode the georeference
>>>>> into the PDF/PS according the OGC standard - for use in Acrobat
>>>>> Reader. To add support for such tag in MapServer, which generates pdf
>>>>> dynamicaly via pdflib, should not be totally problematic.
>>>>>
>>>>> Decoding is not as hard either, there are nice libraries like poppler
>>>>> (http://poppler.freedesktop.org/), which allows you to parse vectors
>>>>> (and convert them to SVG for example) or rasterize the PDF files (into
>>>>> TIFF,...) via Cairo.
>>>>> The work is in assigning correct geographic coordinates to the
>>>>> coordinate system internally used in PDF files and especially write
>>>>> the bridge to the outside world (with GDAL/OGR).
>>>>> I am afraid that authors of the GeoPDF standard would not like this,
>>>>> as it seems that the idea of GeoPDF is "see it in the Acrobat, print
>>>>> it, but that's all". At least I think so, because they discontinued
>>>>> their Geopdf2geotiff product and all the conversion tools are just one
>>>>> way - into GeoPDF. Please correct me...
>>>>>
>>>>> Anyway, in this moment you can quite easily use utility like
>>>>> "pdfimages" to extract full quality image tiles from any GeoPDF (like
>>>>> those from USGS) and merge it based on their location in PDF into one
>>>>> GDAL file via VRT (gdalbuildvrt) with a bit of hacking. This is what I
>>>>> did for my favorite USGS DRG of Grand Canyon ;-).
>>>>> Look at: http://klokan.mzk.cz/~klokan/geopdf/ - soon I will update the
>>>>> MapTiler.org overlay examples...
>>>>>
>>>>> Unfortunately all PDF parsing libraries I know are GPL, and that means
>>>>> we can't use them for the gdal driver - because of the license issues.
>>>>> But to create a GPL utility for converting GeoPDF to anything what
>>>>> GDAL/OGR supports should be OK. Poppler can be the best base of such
>>>>> GDAL-based utility for reading/rasterizing of the GeoPDF files.
>>>>>
>>>>> Now just find a sponsor and time to make it ;-).
>>>>>
>>>>> Best,
>>>>>
>>>>> Klokan Petr Pridal
>>>> _______________________________________________
>>>> gdal-dev mailing list
>>>> gdal-dev at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/gdal-dev
>>>>
>>>>
>>>
>>>
>>
>>
> 
> 


More information about the gdal-dev mailing list