【发布时间】:2026-02-14 14:55:01
【问题描述】:
我正在使用 rasterio 示例模块,list_of_coords 只是 3 个随机点,但只有 2nd 在光栅范围内:
list_of_coords = [(754.2,4248548.6), (754222.6,4248548.6), (54.9,4248548.4)]
sample = np.array(list(rasterio.sample.sample_gen(raster, list_of_coords))).flatten()
输出:
[ 0 896 0]
效果很好,但是您可以看到坐标是否超出光栅图像,它的值为 0。有没有办法让用户知道他们放入列表中的坐标超出了光栅范围? 0 也可以是存在于光栅边界内的值,如此简单的循环:
for idx, element in enumerate(sample):
if element == 0:
print(f"coords {a[idx]} out of raster")
不是一个好的解决方案。 这是我目前的想法:
了解地理坐标系和栅格边界的基本信息后,我们可以写下一些“规则”。使用raster.bounds,我为我的栅格获得了 bbox,并且我写了一个更好的循环:
for idx, element in enumerate(a):
if element[0] > 0 and band2.bounds.right > 0 and element[0] > band2.bounds.right\
or element[0] > 0 and band2.bounds.left > 0 and element[0] < band2.bounds.left: #more conditions
print(f"coords {a[idx]} out of raster")
输出(正确):
coords (754.6, 4248548.6) out of raster
coords (54.6, 4248548.6) out of raster
问题是 - 为了涵盖我需要以这种循环方式编写更多条件的所有可能性,是否有更好的方法让用户知道给定点超出了栅格?
【问题讨论】:
-
你想让事情停下来吗?你可以说
raise ValueError(f"coords {a[idx]} out of raster")。 -
@TimRoberts 不,我正在处理空间数据,我想知道是否有一种有效的方法(比我的解决方案更好)向用户提供列表中给出的坐标超出栅格的信息界限。因此,例如,我的栅格边界是 (x1 = 2, x2=6, y1 = 3, y2 = 7),用户给出点 (100,100) 的坐标。那一点不在光栅范围内,我正在尝试找到一种方法来通知用户。在这种情况下,光栅示例模块返回值 0,但这不好(因为如果光栅图像的值是 0-255)0 在那个范围内。
标签: python geospatial spatial sentinel rasterio