mapbox / geobuf

A compact binary encoding for geographic data.
ISC License
967 stars 84 forks source link

Invalid `LineString` is not reported and breaks further #118

Open JannikGM opened 3 years ago

JannikGM commented 3 years ago

One of our GeoJSON features violates https://tools.ietf.org/html/rfc7946#section-3.1.4:

For type "LineString", the "coordinates" member is an array of two or more positions.

Our feature looks like this:

{
  "type": "Feature",
  "properties": {},
  "geometry": {
    "type": "LineString",
    "coordinates": []
  }
}

We normally generate the coordinates from a list of recorded locations, so if there aren't enough recorded locations, we violate the spec. Similar to this mapbox sample, which also runs into the same issue: https://docs.mapbox.com/mapbox-gl-js/example/animate-a-line/

However, mapbox-gl-js (internally geojson-vt) happily accepts this GeoJSON.

When we run geobuf on this, the generated feature looks like this:

{
  "type": "Feature",
  "properties": {},
  "geometry": {
    "type": "LineString"
  }
}

So the entire coordinates field is removed.

Suddenly mapbox-gl-js (internally geojson-vt) trips on this. It's assumed to exist here and then accessed during conversion, which leads to errors.

I did not check if a similar issue exists for other types, but I'd assume so.