fix(GeoArrow): handle tessellation error & improve mean centers #2803
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In practice, there are many geoarrow files converted from GeoJson files using
ogr2ogr
containing invalid geometries. For example, polygon ring not closed; self-intersect polygon; multipolygon withingeoarrow.polygon
type arrow file etc. This will causeearcut()
function to hang or return an empty triangle index.Ideally, users should make sure the geoarrow file is correct, and use
ogr2ogr
to fix these invalid geometries e.g. with-makeValie
or using SqliteSELECT ST_MAKEVALID
. However, to prevent hanging or crashing in loader.gl, we catch the possible error in earcut and let deckgl to remove the positions of these invalid polygons for filling polygon props. The optiontriangulate: boolean
is also added to allow users to skip polygon tessellation on bulk geometries at loader.gl.Another fix in this PR is to improve the performance of
getMeanCentersFromGeometry()
, which is too slow on a big dataset for now.