【问题标题】:Is there a way using geopandas/shapely/fiona to get highest point withing a polygon?有没有办法使用 geopandas/shapely/fiona 来获得多边形内的最高点?
【发布时间】:2020-10-30 07:12:00
【问题描述】:

我有点 shapefile 和多边形 shapefile。我想找出每个多边形内的最高点。 我做了一个交集来找出哪些点属于每个多边形:

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 值排序的问题,但我遇到了问题。我不知道如何使用 geopandas 从几何图形中提取 Z 坐标。最后我想做一个空间连接并将 Z 值填充到最近的点(另一个 shapefile)。

谢谢

【问题讨论】:

  • 要在您的情况下从 3D 点获取 z 的值,只需将 point.geometry[0].z 用于地理数据框中的第一项即可。
  • 谢谢 swatchai,你知道如何为每个多边形保留最高值的点吗?之后,我只需使用多边形 ID 将该点与同一多边形内的另一组点连接起来。谢谢:)

标签: python geopandas shapely fiona


【解决方案1】:

我重点讲第一个问题,用这个来提取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,取coords 列表中的第一个[0],取第三个[2] 值,即几何体的z 值(因为第一个[0] 是x,第二个[1] 是y 值)。 最近邻居的空间连接部分太长而无法写入。我建议针对这个主题提出一个新问题。

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 2022-01-22
    • 2015-05-13
    • 2020-09-04
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2016-01-31
    • 2020-05-10
    相关资源
    最近更新 更多