【发布时间】:2021-12-31 14:12:07
【问题描述】:
我计划按照 [此处][1] 的说明以 3D 形式突出显示高程数据中的一个区域。因此,我需要一个数组,其中所有点都设置为 0 不应突出显示。数据数组如下所示:
y 51.380591 51.380769 ... 51.408314 51.408493
x ...
9.171581 223.699997 228.199997 ... 297.500000 297.899994
9.171868 220.199997 223.199997 ... 297.600006 297.600006
9.172156 218.900009 220.600006 ... 296.100006 296.100006
9.172443 218.000000 218.100006 ... 295.000000 295.000000
9.172731 223.400009 220.699997 ... 297.100006 297.100006
... ... ... ... ...
9.212988 252.600006 254.100006 ... 313.100006 313.000000
9.213276 257.399994 260.700012 ... 313.600006 313.200012
9.213563 259.500000 262.700012 ... 314.700012 314.000000
9.213851 261.399994 264.600006 ... 315.800018 315.399994
9.214139 262.500000 265.800018 ... 317.399994 317.300018
[149 rows x 157 columns]
我的目标是仅保留满足基于 x,y 位置条件的值。所有其他值应设置为 0。详细地说,我想定义一个 2D 多边形。不在此多边形内的每个点都应设置为 0。
一个示例多边形如下所示。
coords = [(9.185, 51.38), (9.175, 51.385), (9.175, 51.4), (9.2, 51.395)]
poly = Polygon(coords)
[shapely][2] 提供了检查点是否在多边形内的功能。
from shapely.geometry import Point, Polygon
Point(x,y).within(poly)
所以应该应用于所有单元格的函数如下所示:
def KeepValue(x,y,z,poly):
if (Point(x,y).within(poly)):
return z
return 0
我的问题是我应该使用哪个函数将within 函数应用于所有单元格? 对我来说主要的问题是找到一种方法来移交,尤其是x,y and z 参数。
我尝试过 apply/applymap,但效果不佳。 [1]:How to mark an area in plotly 3D surface plot? [2]:https://automating-gis-processes.github.io/CSC18/lessons/L4/point-in-polygon.html
【问题讨论】:
标签: python arrays multidimensional-array shapely