Есть ли способ использовать geopandas / shapely / fiona, чтобы получить наивысшую точку внутри многоугольника? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть шейп-файл точек и шейп-файл многоугольников. Я хочу найти самую высокую точку в каждом многоугольнике. Я сделал пересечение, чтобы узнать, какие точки принадлежат каждому многоугольнику:

import geopandas as gpd

from geopandas.tools import sjoin

point = gpd.GeoDataFrame.from_file(pointSHP)
print("POINT", point)
poly = gpd.GeoDataFrame.from_file(polygonSHP)
print("POLY", poly)
points_within_poly = gpd.sjoin(point, poly, how="inner", op='intersects')
print(points_within_poly.head(10))

Теперь я хотел бы выбрать самую высокую точку для каждого index_right. Я думаю, это вопрос сортировки по значению Z в столбце геометрии, но у меня возникают проблемы с этим. Я не знаю, как извлечь координату Z из геометрии с помощью geo pandas. Наконец, я хотел бы выполнить пространственное соединение и указать значение Z до ближайшей точки (другой шейп-файл).

Спасибо

1 Ответ

0 голосов
/ 29 августа 2020

Я сосредоточусь на первом вопросе, используйте его, чтобы извлечь z координату

import geopandas as gpd
gdf = gpd.read_file("file.shp")
gdf['z'] = None
gdf['z'] = gdf.geometry.apply(lambda x: list(x.coords)[0][2])

или, альтернативно,

z_values = [list(x.coords)[0][2] for x in gdf.geometry]
gdf['z'] = None
gdf['z'] = z_values

объяснение: для каждой геометрии сделайте список coords из геометрии, возьмите первое [0] из списка coords и возьмите третье [2] значение, которое является значением z геометрии (потому что первое [0] - это x, а второй [1] - значение y). часть пространственного соединения от ближайшего соседа слишком длинна для записи. Предлагаю задать новый вопрос по этой топи c.

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