[Qgis-developer] Reading GEOJSON from string using GDAL

Nyall Dawson nyall.dawson at gmail.com
Thu Feb 18 16:30:59 PST 2016


On 15 January 2016 at 06:57, Even Rouault <even.rouault at spatialys.com> wrote:

>> I've got a question regarding the geojson driver you may be able to assist
>> with. Is there any method in the OGR libraries which allow direct parsing
>> of a string to a  layer? (Ie, without first writing it out to a file).
>>
>> I'd like to add the ability to directly paste geojson text into QGIS and
>> have it inserted as a feature in the current layer (like how you can
>> currently paste WKT text as a feature). I don't want to have to manually
>> parse the json (that would be a nightmare).
>
> Well, the GeoJSON driver support "filenames" which are in fact GeoJSON content:
>
> $ ogrinfo '{"type":"Feature","properties":{"foo":"bar"},"geometry":{"type":"Point","coordinates":[2,49]}}' -ro -al
>
> Layer name: OGRGeoJSON
> Geometry: Point
> Feature Count: 1
> Extent: (2.000000, 49.000000) - (2.000000, 49.000000)
> Layer SRS WKT:
> GEOGCS["WGS 84",
>     DATUM["WGS_1984",
>         SPHEROID["WGS 84",6378137,298.257223563,
>             AUTHORITY["EPSG","7030"]],
>         AUTHORITY["EPSG","6326"]],
>     PRIMEM["Greenwich",0,
>         AUTHORITY["EPSG","8901"]],
>     UNIT["degree",0.0174532925199433,
>         AUTHORITY["EPSG","9122"]],
>     AUTHORITY["EPSG","4326"]]
> foo: String (0.0)
> OGRFeature(OGRGeoJSON):0
>   foo (String) = bar
>   POINT (2 49)
>
> Works also with FeatureCollections.
> Alternatively, you could also put the content in a in-memory GDAL file (/vsimem/ virtual file system) and open it.
>
> So you could likely instanciate a temporary layer and get a QGIS feature from that.

Hi Even,

I'm currently exploring this approach (in memory file), but I'm stuck
on how to actually write the string contents to a memory file prior to
opening to it with GDAL. I gather for the python bindings I could
utilise FileFromMemBuffer, but I can't find any similar replacement in
the c api.

What's the correct approach to use here?

Nyall



>
>
> If you are just interested in geometries and not attributes, there's also the C function :
>
> OGRGeometryH    OGR_G_CreateGeometryFromJson (const char *);
>
>
>>
>> If I could somehow take advantage of OGR's geojson driver to do the heavy
>> lifting then this work would be trivial.
>>
>> Any ideas?
>>
>> Nyall
>
> --
> Spatialys - Geospatial professional services
> http://www.spatialys.com


More information about the Qgis-developer mailing list