NetTopologySuite сквош мультиполигон в полигон - PullRequest
0 голосов
/ 05 июля 2018

Я работаю в aspnetcore, используя самую последнюю версию GeoAPI и NetTopologySuite для ядра. То, что я пытаюсь сделать, должно быть довольно простым, но я, похоже, не могу найти правильный способ сделать это, либо экспериментируя с поиском в Google. Или даже как это назвать, если честно, что делает поиск в Google сложнее.

Надеюсь, кто-нибудь ударит меня в правильном направлении.

У меня есть мультиполигон, который может состоять из одного или нескольких полигонов. Я хочу создать буфер вокруг точек этого мультиполигона на расстоянии X. Это в основном наложение карты с интересными концентрическими областями. Заданная точка интереса может попадать в формы исходного многоугольника ... или в первую или вторую буферную область. Вроде как лук, если ядро ​​лука имело случайные формы.

Эта первая часть проста. Просто переберите точки мультиполигона и примените буфер к каждой точке, используя метод буфера:

var bufferZonePoints = new List<IGeometry>();
foreach(var point in multiPolygon.Coordinates)
{
   bufferZonePoints.Add(point.Buffer(x));
}

var bufferZone = this.geometryFactory.CreateMultiPolygon(bufferZonePoints);

Отлично. Но это дает мне еще один мультиполигон, состоящий из тысяч очков. Когда я использую это как наложение карты, я получаю ураган кругов, следуя смутным очертаниям оригинальной формы, похожей на рисунок спирографа. Все, что я хочу, это в основном внешняя граница всех буферных кругов без всех точек в центре.

Я пытался создать ConvexHull для мультиполигона, и сначала он выглядел правильно, пока не понял, что он сбривает углы снаружи, чтобы получить наименьший многоугольник, в который вписываются все эти точки (что и делают выпуклые корпуса после все). Но это вызывает проблемы в материале, который я накладываю. Некоторые интересные объекты могут находиться за пределами фактического буфера, но могут быть внутри, если выпуклая оболочка решает округлить неровную область зоны. (Я надеюсь, что это имеет смысл).

По сути, я пытаюсь взять этот мультиполигон, состоящий из всех этих буферизованных точек, и разделить его на один полигон, который составляет все самые внешние границы буферов. Но без всего спирографического мусора посередине. Я действительно не хочу ConvexHull. Я также попробовал Union и класс GeometryCombiner, но ни один из них не делает то, что я хочу.

Я не знаю, поможет ли это сделать эту грязь более ясной, но в QGIS есть настройка, при которой, когда вы опускаете два круга и круги пересекаются, они объединяются в один большой шарик, похожий на мыльные пузыри, и границы между ними исчезают. , Это то, что я пытаюсь сделать с помощью кода.

Имеет ли это смысл? Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 05 июля 2018

После продолжения экспериментов с моим картографическим инструментом. Казалось бы, Союз действительно дает мне результат, который я хотел.

Я начал с двух многоугольников, которые были достаточно далеко друг от друга, чтобы было понятно, что происходит, соединили их и вернули только оболочку их комбинации. Когда я добавил к нему больше буферизованных точек, стыд стал немного более очевидным.

Это очень хорошо, что я хотел.

В любом случае, спасибо! Надеюсь, это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...