Я пытаюсь использовать инструмент разности turf.js для многоугольника и многоугольника - многоугольные области должны быть вычтены из многоугольной области. Геометрия выглядит хорошо для меня, но я получаю эту ошибку:
{
"name": "TopologyException",
"message": "Directed Edge visited twice during ring-building at (140.97187443743576, -36.980517793468664, undefined) [ undefined ]",
"stack": "Error\n at TopologyException.RuntimeException [as constructor] (https://npmcdn.com/@turf/turf@5.1.6/turf.js:24925:19)\n at new TopologyException (https://npmcdn.com/@turf/turf@5.1.6/turf.js:30875:25)\n at MaximalEdgeRing.computePoints (https://npmcdn.com/@turf/turf@5.1.6/turf.js:31381:46)\n at MaximalEdgeRing.EdgeRing (https://npmcdn.com/@turf/turf@5.1.6/turf.js:31356:8)\n at new MaximalEdgeRing (https://npmcdn.com/@turf/turf@5.1.6/turf.js:31536:17)\n at PolygonBuilder.buildMaximalEdgeRings (https://npmcdn.com/@turf/turf@5.1.6/turf.js:32328:18)\n at PolygonBuilder.add (https://npmcdn.com/@turf/turf@5.1.6/turf.js:32390:29)\n at PolygonBuilder.add (https://npmcdn.com/@turf/turf@5.1.6/turf.js:32385:10)\n at OverlayOp.computeOverlay (https://npmcdn.com/@turf/turf@5.1.6/turf.js:40843:17)\n at OverlayOp.getResultGeometry (https://npmcdn.com/@turf/turf@5.1.6/turf.js:40812:10)",
"pt": null
}
Операция работает нормально, если я пытаюсь, используя два полигона в мультиполигоне по отдельности (т.е. как отдельные полигоны, а не как мультиполигон)), но когда оба они объединены в мультиполигон, я получаю сообщение об ошибке.
Это некорректная строка в моем коде:
diffResult = turf.difference(myPolygon,myMultiPolygon);
myPolygon выглядит следующим образом:
{
"type": "Polygon",
"coordinates": [
[
[
140.9716711384525,
-36.97645228850101
],
[
140.9743975752003,
-36.97682241916141
],
[
140.97751071844857,
-36.97723786980259
],
[
140.97749308140382,
-36.977304276099005
],
[
140.97715289421623,
-36.97770848336402
],
[
140.97617893060388,
-36.98131793226549
],
[
140.9714880598484,
-36.9804459718428
],
[
140.9714500775476,
-36.97642733756345
],
[
140.9716711384525,
-36.97645228850101
]
]
]
}
myMultiPolygon выглядит следующим образом:
{
"type": "MultiPolygon",
"coordinates": [
[
[
[
140.9741163253784,
-36.97713531664132
],
[
140.9740304946899,
-36.97903805606076
],
[
140.97437381744382,
-36.98025509866784
],
[
140.97596168518066,
-36.98128357020193
],
[
140.97641229629514,
-36.98078647736292
],
[
140.9766697883606,
-36.97970657483203
],
[
140.97628355026242,
-36.97958658471583
],
[
140.97634792327878,
-36.97900377288852
],
[
140.9764981269836,
-36.97866094031662
],
[
140.97510337829587,
-36.97727245260485
],
[
140.97422361373899,
-36.97658677031591
],
[
140.9741163253784,
-36.97713531664132
]
],
[
[
140.9712839126587,
-36.97727245260485
],
[
140.9725499153137,
-36.97782099398754
],
[
140.97175598144528,
-36.979398028436655
],
[
140.971884727478,
-36.980615065286116
],
[
140.97134828567502,
-36.98059792405719
],
[
140.9712839126587,
-36.97727245260485
]
]
]
]
}
Обратите внимание, что оба полигона в myMultiPolygon простираются по крайней мере на одном из ребер в myPolygon, т. Е. Ни один из них полностью не помещается в myPolygon. Я не уверен, является ли это причиной ошибки - может быть, мне нужно сначала каким-то образом «урезать» myMultiPolygon до myPolygon, прежде чем пытаться «разнести»?