[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