Skip to content
Permalink
Browse files

Review fixes + comment about merging of multi-part geometries

(cherry picked from commit 21c6573)
(cherry picked from commit 6bdcba4)
  • Loading branch information
wonder-sk authored and nyalldawson committed Jul 21, 2020
1 parent d0cb319 commit 08576cc99caf29ba83864718d448c2bd8ad21f3d
Showing with 11 additions and 7 deletions.
  1. +11 −7 src/core/geometry/qgsgeos.cpp
@@ -880,8 +880,13 @@ QgsGeometryEngine::EngineOperationResult QgsGeos::splitPolygonGeometry( GEOSGeom
if ( !mGeos )
return InvalidBaseGeometry;

// we will need prepared geometry for intersection tests
const_cast<QgsGeos *>( this )->prepareGeometry();
if ( !mGeosPrepared )
return EngineError;

//first test if linestring intersects geometry. If not, return straight away
if ( !GEOSIntersects_r( geosinit.ctxt, splitLine, mGeos.get() ) )
if ( !GEOSPreparedIntersects_r( geosinit.ctxt, mGeosPrepared.get(), splitLine ) )
return NothingHappened;

//first union all the polygon rings together (to get them noded, see JTS developer guide)
@@ -896,12 +901,7 @@ QgsGeometryEngine::EngineOperationResult QgsGeos::splitPolygonGeometry( GEOSGeom
return InvalidBaseGeometry;
}

// we will need prepared geometry for intersection tests
const_cast<QgsGeos *>( this )->prepareGeometry();
if ( !mGeosPrepared )
return EngineError;

//test every polygon if contained in original geometry
//test every polygon is contained in original geometry
//include in result if yes
QVector<GEOSGeometry *> testedGeometries;

@@ -928,6 +928,10 @@ QgsGeometryEngine::EngineOperationResult QgsGeos::splitPolygonGeometry( GEOSGeom
return NothingHappened;
}

// For multi-part geometries, try to identify parts that have been unchanged and try to merge them back
// to a single multi-part geometry. For example, if there's a multi-polygon with three parts, but only
// one part is being split, this function makes sure that the other two parts will be kept in a multi-part
// geometry rather than being separated into two single-part geometries.
mergeGeometriesMultiTypeSplit( testedGeometries );

int i;

0 comments on commit 08576cc

Please sign in to comment.
You can’t perform that action at this time.