Группировка полигонов после разделения MultiPolygon с помощью LineString - PullRequest
0 голосов
/ 03 февраля 2020

I sh, чтобы разделить MultiPolygon (представляющий страну с островами) через LineString, тем самым разделив округ на две части.

from shapely.ops import split
collection_of_polyogns = split(country,line)

Результатом является набор полигонов в объекте GeometryCollection. Как бы вы сгруппировали результат в два объекта MultiPolygon, каждый из которых содержал полигоны для своей соответствующей половины?

ОБНОВЛЕНИЕ

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

1 Ответ

0 голосов
/ 03 февраля 2020

Итак, сначала у вас есть MultiPolygon вашей страны, а затем ваши полигоны:

from shapely.ops import split
from shapely.geometry import Point, LineString, Polygon, MultiPolygon
#Somewhere you get your country and your line vars
collection_of_polygons = split(country,line)

Затем вы создаете многоугольник исходной границы ваших стран MutliPolygon и выполняете такое же разбиение с помощью линии:

bounds = country.bounds
p1 = Point(bounds[0],bounds[-1])
p2 = Point(bounds[0],bounds[1])
p3 = Point(bounds[-2],bounds[1])
p4 = Point(bounds[-2],bounds[-1])

point_list = [p1, p2, p3, p4, p1]
bounds_poly = Polygon(point_list)

boundaries = shapely.ops.split(bounds_poly,line)

Составьте два списка и выполните итерации по полигонам разделенной страны, чтобы проверить, находятся ли они в пределах первого полигона от полигона разделения границ:

group1, group2 = [],[]
for x in collection_of_polygons:
    if x.within(boundaries[0]):
        group1.append(x)
    else:
        group2.append(x)

Наконец, назначьте два списка двум двум разные мультиполигоны:

group_multi1 = MultiPolygon(group1)
group_multi2 = MultiPolygon(group2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...