[gdal-dev] RFC 44: JSON/XML output for ogrinfo/gdalinfo
Even Rouault
even.rouault at mines-paris.org
Tue Nov 19 12:01:13 PST 2013
Le mardi 19 novembre 2013 17:42:32, Howard Butler a écrit :
> All,
>
> Dan Little and myself would like to put forward an RFC proposing -xml and
> -json output support for both ogrinfo and gdalinfo. No changes are
> proposed to the current text format (which would continue to be the
> default output format), but having JSON and XML available would greatly
> ease the integration of gdalinfo and ogrinfo into existing processing
> workflows without requiring that someone jump into scripting land. Though
> it might have been overkill to have an RFC, I thought it would be useful
> to have something to collaborate on if others have ideas about these
> particular features.
>
> http://trac.osgeo.org/gdal/wiki/rfc44_gdalinfoxml
>
> We look forward to your feedback,
Howard,
Certainly a proposal that would please people that don't want to study GDAL or
OGR API ;-)
A few points, with some overlap with previous email exchanges :
- so that users can anticipate how to parse the output, documenting the
grammar of the JSON and XML outputs seems to be necessary and should be the
main topic of discussion in this RFC phase.
- some stability of the output would be appreciated, although it is always
difficult to guaranty it will stay stable forever. For example, when adding RFC
41 (multiple geometry fields per layer/feature), I tried to not change the
output of ogrinfo when there's a single geometry but that implied some if else
logic. But json / xml content have in their nature at least the capacity of
being extended with new elements/nodes, so users would be encouraged to be
robust to elements/nodes that were not documented in the GDAL version on which
they based their implementation. And if breakage in the format occurs at some
point for valid reasons, the action will be to document that in the release
notes.
- I saw on IRC that you didn't anticipate to make that capability as an API
call but still rely on parsing the output of the utilities. That make its use
a bit complicated (in my opinion), but I don't see this as a blocking point.
By the way, regarding ogrinfo, do you intend to dump all the features in the -
al mode or just the summary of the layers ? The "background" paragraph only
mentions metadata. In which case there could be some redundancy with the
GeoJSON and GML drivers (*)
Another point to take into account is that CPLMiniXML builds a DOM, as well as
libjson-c. So, if dumping a huge layer that could possibly not fit into RAM
(for that reason, the GML driver write "at hand" its output, and the GeoJSON
builds a JSON object for each object that it dumps into the output, but not a
JSON object for the whole collection. The inconsistency being that for read
support, a global JSON object is reconstructed. End of slightly out of topic
consideration). Not necessarily a use case that we want to cover, and to go
back to my remark about an API call, you could raise that an API call would
return a string, so with that same problem ;-)
- regarding Etienne's remark regarding all various way of encoding projection,
I don't think we need to cover all the possibilities. <SRS
type="WKT">PROJCS[...]</SRS> could be the base possibility. And we can then
easily add other variants if needed.
- regarding the possible sources of inspiration for XML formats, for GDAL, we
have PAM .aux.xml and .vrt as examples (both share common XML elements). For
OGR, we also have the .vrt format
$ python swig/python/samples/ogr2vrt.py -schema poly.shp out.vrt
$ cat out.vrt
<OGRVRTDataSource>
<OGRVRTLayer name="poly">
<SrcDataSource relativeToVRT="0" shared="0">@dummy@</SrcDataSource>
<SrcLayer>@dummy@</SrcLayer>
<GeometryType>wkbPolygon</GeometryType>
<LayerSRS>PROJCS["OSGB 1936 / British National
Grid",GEOGCS["OSGB
1936",DATUM["OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],UNIT["Meter",1]]</LayerSRS>
<Field name="AREA" type="Real" width="12" precision="3"/>
<Field name="EAS_ID" type="Real" width="11"/>
<Field name="PRFEDEA" type="String" width="16"/>
</OGRVRTLayer>
</OGRVRTDataSource>
(*) . Well, I've just actually looked at the proposed ogrinfo code and see
that the XML format is a custom one. I'm not particularly a huge fan of GML,
although I spent (too) much time with it, but I'm not particularly
enthousiastic that we invent our own OGR specific vector format... Someone
would need to write a OGR driver to read it ;-)
Best regards,
Even
--
Geospatial professional services
http://even.rouault.free.fr/services.html
More information about the gdal-dev
mailing list