[gdal-dev] Idea: GeoTIFF box in JPEG to add georeferencing

Even Rouault even.rouault at mines-paris.org
Wed May 14 05:31:27 PDT 2014


> so which ones are remaining, following the clarification you mention below?

Hi Peter,

thanks for the clarifications.

To be honest, my main reluctance to GML-based standards is that they are very 
rich, and thus difficult to understand and implement. A rather large chain of 
depending standards : GMLJP2 refers to GMLCov which refers to GML which refers 
to etc.... And generally there are many ways in GML to express the same thing, 
which makes it difficult to implement the reading part. I had some fun a few 
weeks ago with that with polygons : http://erouault.blogspot.fr/2014/04/gml-
madness.html ...

To come back to more concrete considerations, the axis order issue, as 
confirmed by Jukka, is something that we constantly have to face and have 
troubles to get right.
Jukka, in his review of the new proposed GMLJP2 ( 
http://lists.opengeospatial.org/pipermail/requests/2014-March/000220.html ), 
also raised an interesting question about all the different forms of urn/uri 
that might be found to express SRS.

Another related point is: how do you encode a SRS that is not in the EPSG 
database ? In GDAL's code related to generation of GMLJP2, I see that when we 
write a GMLJP2 with a SRS that is not linked to an EPSG code, we build a local 
GML definition of the SRS, put it in a CRSDictionary.gml JP2 box and link to it 
with "gmljp2://xml/CRSDictionary.gml#ogrcrs1" in the GMLJP2 box. So, to use 
GMLCov in PNG/JPEG/etc... we would likely need both a GMLCov "box" and a CRS 
"box". Not very convenient.

And for fun, you'll find below in [1] how the proj.4 string "+proj=utm +zone=36 
+ellps=WGS84" is translated into GML...

Another practical issue is that the current export/import code in GDAL 
from/into the GML definition is limited to Transverse Mercator and Lambert 
Conformal Conic. No fundamental reason that it couldn't be improved, but 
someone would have to do it.
Besides, I'm not sure if many other software packages implement that GML 
definition of SRS either. For example, it looks like GeoTools doesn't :
http://osgeo-org.1560.x6.nabble.com/Parsing-GML-CRS-definitions-td4963620.html 

I agree with Frank that it is difficult to get excited by GeoTIFF either. The 
main advantages I can see is that :
* it is already rather well supported by most geo-enabled software due to its 
long existence and maturity. So basing something on it shouldn't involve a lot 
of work.
* its binary form makes it rather compact, which is good for example if you 
want to add georeferencing to small PNG/JPEG tiles.

Best regards,

Even

[1] 

<gml:ProjectedCRS gml:id="ogrcrs1">
  <gml:srsName>UTM Zone 36, Northern Hemisphere</gml:srsName>
  <gml:baseCRS>
    <gml:GeographicCRS gml:id="ogrcrs2">
      <gml:srsName>WGS 84</gml:srsName>
      <gml:usesEllipsoidalCS>
        <gml:EllipsoidalCS gml:id="ogrcrs3">
          <gml:csName>ellipsoidal</gml:csName>
          <gml:csID>
            <gml:name gml:codeSpace="urn:ogc:def:cs:EPSG::">6402</gml:name>
          </gml:csID>
          <gml:usesAxis>
            <gml:CoordinateSystemAxis gml:id="ogrcrs4" 
gml:uom="urn:ogc:def:uom:EPSG::9102">
              <gml:name>Geodetic latitude</gml:name>
              <gml:axisID>
                <gml:name 
gml:codeSpace="urn:ogc:def:axis:EPSG::">9901</gml:name>
              </gml:axisID>
              <gml:axisAbbrev>Lat</gml:axisAbbrev>
              <gml:axisDirection>north</gml:axisDirection>
            </gml:CoordinateSystemAxis>
          </gml:usesAxis>
          <gml:usesAxis>
            <gml:CoordinateSystemAxis gml:id="ogrcrs5" 
gml:uom="urn:ogc:def:uom:EPSG::9102">
              <gml:name>Geodetic longitude</gml:name>
              <gml:axisID>
                <gml:name 
gml:codeSpace="urn:ogc:def:axis:EPSG::">9902</gml:name>
              </gml:axisID>
              <gml:axisAbbrev>Lon</gml:axisAbbrev>
              <gml:axisDirection>east</gml:axisDirection>
            </gml:CoordinateSystemAxis>
          </gml:usesAxis>
        </gml:EllipsoidalCS>
      </gml:usesEllipsoidalCS>
      <gml:usesGeodeticDatum>
        <gml:GeodeticDatum gml:id="ogrcrs6">
          <gml:datumName>unknown</gml:datumName>
          <gml:usesPrimeMeridian>
            <gml:PrimeMeridian gml:id="ogrcrs7">
              <gml:meridianName>Greenwich</gml:meridianName>
              <gml:greenwichLongitude>
                <gml:angle gml:uom="urn:ogc:def:uom:EPSG::9102">0</gml:angle>
              </gml:greenwichLongitude>
            </gml:PrimeMeridian>
          </gml:usesPrimeMeridian>
          <gml:usesEllipsoid>
            <gml:Ellipsoid gml:id="ogrcrs8">
              <gml:ellipsoidName>WGS84</gml:ellipsoidName>
              <gml:semiMajorAxis 
gml:uom="urn:ogc:def:uom:EPSG::9001">6378137</gml:semiMajorAxis>
              <gml:secondDefiningParameter>
                <gml:inverseFlattening 
gml:uom="urn:ogc:def:uom:EPSG::9201">298.257223563</gml:inverseFlattening>
              </gml:secondDefiningParameter>
            </gml:Ellipsoid>
          </gml:usesEllipsoid>
        </gml:GeodeticDatum>
      </gml:usesGeodeticDatum>
    </gml:GeographicCRS>
  </gml:baseCRS>
  <gml:definedByConversion>
    <gml:Conversion gml:id="ogrcrs9">
      <gml:usesMethod xlink:href="urn:ogc:def:method:EPSG::9807" />
      <gml:usesParameterValue>
        <gml:value gml:uom="urn:ogc:def:uom:EPSG::9102">0</gml:value>
        <gml:valueOfParameter xlink:href="urn:ogc:def:parameter:EPSG::8801" />
      </gml:usesParameterValue>
      <gml:usesParameterValue>
        <gml:value gml:uom="urn:ogc:def:uom:EPSG::9102">33</gml:value>
        <gml:valueOfParameter xlink:href="urn:ogc:def:parameter:EPSG::8802" />
      </gml:usesParameterValue>
      <gml:usesParameterValue>
        <gml:value gml:uom="urn:ogc:def:uom:EPSG::9001">0.9996</gml:value>
        <gml:valueOfParameter xlink:href="urn:ogc:def:parameter:EPSG::8805" />
      </gml:usesParameterValue>
      <gml:usesParameterValue>
        <gml:value gml:uom="urn:ogc:def:uom:EPSG::9001">500000</gml:value>
        <gml:valueOfParameter xlink:href="urn:ogc:def:parameter:EPSG::8806" />
      </gml:usesParameterValue>
      <gml:usesParameterValue>
        <gml:value gml:uom="urn:ogc:def:uom:EPSG::9001">0</gml:value>
        <gml:valueOfParameter xlink:href="urn:ogc:def:parameter:EPSG::8807" />
      </gml:usesParameterValue>
    </gml:Conversion>
  </gml:definedByConversion>
  <gml:usesCartesianCS>
    <gml:CartesianCS gml:id="ogrcrs10">
      <gml:csName>Cartesian</gml:csName>
      <gml:csID>
        <gml:name gml:codeSpace="urn:ogc:def:cs:EPSG::">4400</gml:name>
      </gml:csID>
      <gml:usesAxis>
        <gml:CoordinateSystemAxis gml:id="ogrcrs11" 
gml:uom="urn:ogc:def:uom:EPSG::9001">
          <gml:name>Easting</gml:name>
          <gml:axisID>
            <gml:name gml:codeSpace="urn:ogc:def:axis:EPSG::">9906</gml:name>
          </gml:axisID>
          <gml:axisAbbrev>E</gml:axisAbbrev>
          <gml:axisDirection>east</gml:axisDirection>
        </gml:CoordinateSystemAxis>
      </gml:usesAxis>
      <gml:usesAxis>
        <gml:CoordinateSystemAxis gml:id="ogrcrs12" 
gml:uom="urn:ogc:def:uom:EPSG::9001">
          <gml:name>Northing</gml:name>
          <gml:axisID>
            <gml:name gml:codeSpace="urn:ogc:def:axis:EPSG::">9907</gml:name>
          </gml:axisID>
          <gml:axisAbbrev>N</gml:axisAbbrev>
          <gml:axisDirection>north</gml:axisDirection>
        </gml:CoordinateSystemAxis>
      </gml:usesAxis>
    </gml:CartesianCS>
  </gml:usesCartesianCS>
</gml:ProjectedCRS>

-- 
Geospatial professional services
http://even.rouault.free.fr/services.html


More information about the gdal-dev mailing list