RFC 65: RFC 7946 GeoJSON

Authors: Sean Gillies

Contact: sean at mapbox.com

Status: Adopted, implemented

Implementation version: 2.2

Summary

GeoJSON has been standardized by the IETF: RFC 7946. Updates to the OGR GeoJSON driver are needed so that it may write RFC 7946 GeoJSON.

Rationale

The RFC 7946 standard is backwards compatible with the legacy definition of GeoJSON, but has a few differences (see https://tools.ietf.org/html/rfc7946#appendix-B). For OGR, the most significant are: removal of "crs" (CRS84 only), counter-clockwise winding of polygons, geometry splitting at the antimeridian, and representation of bounding boxes at the antimeridian and poles. Note: RFC 7946 explicitly restricts to 2D and 3D coordinates, and forbid use of the M dimension for example. This was already the case in the existing driver for the GeoJSON 2008 output.

Consensus on the gdal-dev list is that developers should be able to require RFC 7946 GeoJSON by configuring layer creation with an option and that it be an all-or-nothing switch.

Changes

A layer creation option will be added for the GeoJSON driver, e.g., RFC7946=TRUE. When "on", OGR will write GeoJSON with CRS84 coordinates (reprojecting as needed) with 7 places of precision by default, polygons wound properly, and geometries split at the antimeridian.

Related to that work, the OGRGeometryFactory::transformWithOptions() method has been improved to better deal with reprojection of geometries from polar projections, and projections that span the antimeridian, to EPSG:4326

Updated drivers

GeoJSON

SWIG bindings (Python / Java / C# / Perl) changes

None

Utilities

Utilities will implement RFC 7946 by using the layer creation option.

Documentation

Documentation of the new layer creation option will reference RFC 7946.

Test Suite

The ogr_geojson.py file tests the effect of the new option.

Compatibility Issues

As this is a opt-in parameter, no backward compatibility issue. GeoJSON files conformant to RFC 7646 can be read by previous GDAL/OGR versions.

Implementation

Implementation has been done by Even Rouault and sponsored by Mapbox.

Voting history

+1 from JukkaR, HowardB, DanielM and EvenR