Support plotting OGR GeoJSON files
Description of the desired feature
GeoJSON is a standard plaintext OGR format (https://gdal.org/drivers/vector/geojson.html) often used for web mapping and data interchange, and this file format is also rendered by GitHub natively (see https://docs.github.com/en/free-pro-team@latest/github/managing-files-in-a-repository/mapping-geojson-files-on-github), making it an ideal format for sharing online.
There's some action at https://github.com/GenericMappingTools/pygmt/issues/608 on integrating PyGMT with Geopandas, and being able to read GeoJSON directly into GMT plot would really help to simplify the coding! Currently GMT can read shapefiles (https://docs.generic-mapping-tools.org/6.1/cookbook/file-formats.html#shapefiles) via GDAL, but it would be nice to extend this to the GeoJSON format (this is a smaller scope than full OGR vector support as in #3013).
Are you willing to help implement and maintain this feature? When I pick up C programming :slightly_smiling_face:
Wei Ji, the fact is that GMT can already read them (see gmt_ogrread.c) but it lacks the ability to convert the data into its internal data structures. So in practice this feature is not yet accessible. Except from Julia where I do the data parsing in the Julia side.
Just following up on this because I'm working on a PR at https://github.com/GenericMappingTools/pygmt/pull/1000. What is required to convert GeoJSON (or any OGR format) data to GMT's internal data structures? I had a read through #3013 again but couldn't really understand what needs to be done.
Thought I'd give some test cases too (remove the .txt extension after downloading):
gmt info data.gmt -C
# 0 35 0 20
gmt info data.geojson -C
# gmtinfo [ERROR]: No data columns to work with - exiting
# gmtinfo [ERROR]: Data file only has trailing text. GMT expects numerical columns followed by optional trailing text
Wei Ji, #3013 is only marginally related to support reading all the OGR formats. It's something we need if we want to keep information about geometries but we could live without it. The big issue is that the GMT IO is complicated and by GMT's internal data structures I mean having to do programming like this and below. That is, to get the data from GDAL and translate it to fill all of those Dataset->table, Dataset->Segments, ...
And BTW, in Julia I get this
D = gmtread("data.geojson");
plot(D, show=true)

This is a know issue that needs a more general approach.
Should we reconsider this feature request, considering that GeoJSON is a commonly used format?
Ideally we should read the GeoJSON file and convert it to GMT's internal data structure, as mentioned above, but it's technically challenging. Shapefiles are supported by converting shapefiles to OGR_GMT format via ogr2ogr calls. The same approach can be applied to GeoJSON files. I've submitted a PR at #8719.
I agree - but doesnt this apply to all formats not supported by GMT, but supported by ogr2ogr? Why not do this with all formats understood by ogr2ogr?
Maybe we should remove support for shapefiles instead.. http://switchfromshapefile.org/.
We could add more (gpkg for instance) but I'm not particular proud in this GMT solution and a bit reluctant in advertising it for more formats.