Определите уникальные группировки многоугольников в геопандах / стройнойPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Определите уникальные группировки многоугольников в геопандах / стройной

Сообщение Anonymous »

Допустим, у меня есть две непересекающиеся группы / «острова» полигонов (например, трактаты переписи в двух не приспособленных округах). Мои данные могут выглядеть примерно так: < /p>

>>> p1=Polygon([(0,0),(10,0),(10,10),(0,10)])
>>> p2=Polygon([(10,10),(20,10),(20,20),(10,20)])
>>> p3=Polygon([(10,10),(10,20),(0,10)])
>>>
>>> p4=Polygon([(40,40),(50,40),(50,30),(40,30)])
>>> p5=Polygon([(40,40),(50,40),(50,50),(40,50)])
>>> p6=Polygon([(40,40),(40,50),(30,50)])
>>>
>>> df=gpd.GeoDataFrame(geometry=[p1,p2,p3,p4,p5,p6])
>>> df
geometry
0 POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))
1 POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))
2 POLYGON ((10 10, 10 20, 0 10, 10 10))
3 POLYGON ((40 40, 50 40, 50 30, 40 30, 40 40))
4 POLYGON ((40 40, 50 40, 50 50, 40 50, 40 40))
5 POLYGON ((40 40, 40 50, 30 50, 40 40))
>>>
>>> df.plot()
< /code>

< /p>

Я хочу, чтобы многоугольные полигоны в каждом острове приняли на идентификатор (может быть арбит). Например, 3 многоугольника в левом нижнем углу могут иметь IslandId = 1, а 3 полигона в правом верхнем углу могут иметь IslandId = 2. Я делаю следующее: < /p>

1) Создать геодатафрейм с геометрией, равной полигонам в мультиполигоне Unary Union. Это дает мне два многоугольника, по одному для каждого «острова». < /p>

>>> SepIslands=gpd.GeoDataFrame(geometry=list(df.unary_union))
>>> SepIslands.plot()
< /code>

< /p>

2) Создайте идентификатор для каждой группы. < /p>

2).>>> SepIslands['IslandID']=SepIslands.index+1
< /code>

3) Пространственное присоединение к островам к исходным многоугольникам, поэтому каждый многоугольник имеет соответствующий идентификатор острова. < /p>

>>> Final=gpd.tools.sjoin(df, SepIslands, how='left').drop('index_right',1)
>>> Final
geometry IslandID
0 POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0)) 1
1 POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10)) 1
2 POLYGON ((10 10, 10 20, 0 10, 10 10)) 1
3 POLYGON ((40 40, 50 40, 50 30, 40 30, 40 40)) 2
4 POLYGON ((40 40, 50 40, 50 50, 40 50, 40 40)) 2
5 POLYGON ((40 40, 40 50, 30 50, 40 40)) 2
< /code>

Это действительно лучший /наиболее эффективный способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/334 ... as-shapely
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Создать союз многоугольников в геопандах, или стройного (в одну геометрию)
    Anonymous » » в форуме Python
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • В пандах группировки я хочу взять только максимальный объект второго столбца группировки [дубликат]
    Anonymous » » в форуме Python
    0 Ответы
    103 Просмотры
    Последнее сообщение Anonymous
  • C ++ STD :: Уникальные возвраты явно не уникальные результаты
    Anonymous » » в форуме C++
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Внутреннее смещение DXF с стройной
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Внутреннее смещение DXF с стройной
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»