Как объединить полигоны с неттопологисуитом?
Я должен объединить набор полигонов, создав новый полигон.
Иногда случается, что у меня есть маленькие дыры среди полигонов, поэтому, когда я пытаюсь объединить их, я получаю сообщение об ошибке.
Как я могу обнаружить это и решить?
Обновление с некоторыми примерами ошибок
side location conflict [ (12.235768128349596, 44.387249570104892, NaN) ]
at NetTopologySuite.Operation.Overlay.Snap.SnapIfNeededOverlayOp.GetResultGeometry(SpatialFunction opCode)
at NetTopologySuite.Geometries.Geometry.Union(IGeometry other)
at NetTopologySuite.Operation.Union.CascadedPolygonUnion.UnionOptimized(IGeometry g0, IGeometry g1)
at NetTopologySuite.Operation.Union.CascadedPolygonUnion.Union()
at NetTopologySuite.Operation.Union.UnaryUnionOp.Union()
или же
found non-noded intersection between LINESTRING(12.448591764796777 41.972860890341124, 12.448731325430401 41.972841479998927) and LINESTRING(12.449 41.973, 12.448695198462875 41.972831837041554) [ (12.448716431340822, 41.972843551495508, NaN) ]
at NetTopologySuite.Noding.FastNodingValidator.CheckValid()
at NetTopologySuite.Operation.Overlay.OverlayOp.ComputeOverlay(SpatialFunction opCode)
at NetTopologySuite.Operation.Overlay.OverlayOp.Overlay(IGeometry geom0, IGeometry geom1, SpatialFunction opCode)
или же
Invalid number of points in LineString (found 1 - must be 0 or >= 2)
at NetTopologySuite.Geometries.LineString..ctor(ICoordinateSequence points, IGeometryFactory factory)
at NetTopologySuite.Geometries.GeometryFactory.CreatePolygon(ICoordinateSequence coordinates)
1 ответ
Большинство ошибок, которые вы получаете, связаны с неправильной геометрией. Вы можете проверить правильность геометрии, используя geometry.IsValid
или с помощью NetTopologySuite.Operation.Valid.IsValidOp
учебный класс. Чтобы исправить эти ошибки, вы обычно можете использовать буфер смещения 0: geometry = geometry.Buffer(0)
,