当前位置: 首页 > 知识库问答 >
问题:

有没有一种方法可以使用geopandas/shapely/fiona获得多边形的最高点?

莫逸仙
2023-03-14

我有点形状文件和多边形形状文件。我想找出每个多边形内的最高点。我做了一个交集,以确定哪些点属于每个多边形:

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))

现在我想为每个索引选择最高点。我认为这是一个在几何列中按Z值排序的问题,但我在做这件事时遇到了问题。我不知道如何使用geopandas从几何体中提取Z坐标。最后,我想进行空间连接,并将Z值填充到最近的点(另一个shapefile)。

非常感谢。

共有1个答案

陶弘业
2023-03-14

我将重点讨论第一个问题,用它来提取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

说明:对于每个几何体,从几何体中列出坐标,取坐标列表中的第一个[0],取第三个[2]值,即几何体的z值(因为第一个[0]是x,第二个[1]是y值)。最近邻居的空间连接部分太长,无法写入。我建议就这个话题问一个新问题。

 类似资料:
  • 假设我有两个不相交的多边形组/“岛屿”(想想两个不相邻县的人口普查区)。我的数据可能看起来像这样: 我希望每个岛内的多边形采用表示其组的ID(可以是任意的)。例如,左下角的3个多边形的IslandID为1,右上角的3个多边形的IslandID为2。 我已经开发了一种方法来做到这一点,但我想知道这是否是最好/最有效的方法。我做以下工作: 1) 创建一个几何体等于多多边形一元并集内多边形的地理数据框。

  • 问题内容: 现在我正在做: 有没有更有效的方法直接从Find(或其他搜索功能)中获取带有用户名的slice,而没有struct和range循环? 问题答案: MongoDB的结果始终是文档列表。因此,如果要获取值列表,则必须像以前一样手动将其转换。 使用自定义类型(源自) 另外请注意,如果您要创建自己的类型(从派生),则可以覆盖其取消编组逻辑,并仅从文档中“提取” 。 它看起来像这样: 然后将用户

  • 我试图让我的UI显示两个按钮,其中一个稍微重叠在另一个,在一个全幅卡的中间。因为堆栈的宽度只能与其未定位的子级相同,所以我添加了一个宽度为double.infinity的SizedBox的未定位子级,以便给我一个画布来放置按钮,但我不知道该放什么作为SizedBox的高度。理想情况下,无论用户是在手机上还是在平板电脑上,我都希望这个小部件能够适当地调整自己的大小,所以我宁愿将SizedBox的高度

  • 我想声明一个像belove这样的类 但是它似乎没有语法来支持这一点,它有任何方法可以保持在

  • 问题内容: 我有一组〜36,000个多边形,代表该国家的一个分区(〜县)。我的python脚本收到很多点:pointId,经度,纬度。 对于每个点,我想发送回pointId,polygonId。对于每个点,循环进入所有多边形并使用myPoint.within(myPolygon)效率很低。 我想匀称的库提供了一种更好的方式来准备多边形,以便找到一个点的多边形成为树路径(国家,地区,子地区…) 到目

  • 问题内容: 假设我有以下代码: 这段代码的问题在于,协程内部的循环永远不会完成第一次迭代,而大小会不断增加。 为什么会这样发生,我该怎么解决? 我无法摆脱单独的线程,因为在我的真实代码中,我使用了单独的线程与串行设备进行通信,而且我还没有找到使用的方法。 问题答案: 不是线程安全的,因此您不能直接在多个线程中直接使用它。相反,您可以使用,它是提供线程感知队列的第三方库: 还有(全披露:我写了它),