Используя NetTopology в C #, я получаю исключение «найдено пересечение без узлов» при определении разницы между двумя конкретными геометриями.
Эти геометрические формы являются результатом использования нескольких подпрограмм, таких как CascadedPolygonUnion.Union
, Intersection
и Difference
.
В какой-то момент у нас есть MultiPolygon
, из которого мы хотим вырезать другую геометрию (Polygon
):
Мы используем этот код, чтобы попытаться отрезать «красный» многоугольник:
Geometry difference = multiPolygon.Difference(geometryToRemove);
Но тогда мы получаем NetTopologySuite.Geometries.TopologyException
с сообщением:
found non-noded intersection between LINESTRING (240173.28029999882 493556.2806000002, 240173.28177031482 493556.28131837514) and LINESTRING (240173.28176154062 493556.2813140882, 240173.28176153247 493556.2813140842) [ (240173.28176153894, 493556.2813140874) ]
Я задал этот вопрос также на форуме NetTopologySuite Discussuion, потому что мы близки к дате выпуска и я надеялся, что кто-то сможет дать дополнительную информацию (идеи обходного пути), поскольку это выглядит как ошибка в библиотеке, потому что сами полигоны кажутся действительными.
Данные о многоугольниках можно найти здесь - мы используем ' RDNew 'для выполнения действия Difference
, но я также добавил версии этих многоугольников WGS84, чтобы иметь возможность просматривать их в таких инструментах, как geojson.io.