Агрегирование мультиполигона в xy-координату в GeoPandas - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть геоданные, которые содержат мультипольные формы различных узлов в сети. Тем не менее, я не заинтересован в построении фигур и хочу представить узлы в виде единой координаты. Можно ли объединить мультиполию в одну координату xy в соответствующих crs?

Мне нужна единственная точка для построения сетевого узла на карте страны уровня NUTS-2, в которой я хочу проверить, какой области NUTS-2 соответствует точка. Мне нужна эта ссылка, чтобы запустить отдельную модель, результаты сети которой будут отображаться в верхней части карты страны в виде графика networkx.

Я работаю python 3.7 с работающей установкой conda-forge гео pandas 0.7.0

1 Ответ

0 голосов
/ 11 апреля 2020

Я нашел способ!

import numpy as np
import geopandas as gpd

from shapely.geometry import mapping


def multipoly_to_xy_points(df, geo_col, columns=None):

    for index, shape in df[geo_col].items():

        if shape == None:
            df.at[index, 'x'] = None
            df.at[index, 'y'] = None

        else:
            cors = mapping(shape)['coordinates'][0][0]
            x, y = np.array(cors).mean(axis=0)

            df.at[index, 'x'] = x
            df.at[index, 'y'] = y

    gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.x, df.y))

    if columns is not None:

        if 'geometry' not in columns:
            columns.append('geometry')

        gdf = gdf[columns]

    return gdf
...