我使用的是rasterio示例模块,坐标列表只有3个随机点,但只有第2个在光栅边界内:
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
问题是-为了涵盖我需要在这个循环中写的所有可能性更多的条件,tere是让用户知道给定点超出光栅的更好方法吗
^{} 提供一个
masked
参数。当True
时,它根据光栅数据集的边界框生成Masked arrays当坐标超出光栅边界时,它们将转换为带有
None
的python列表:我能想到的最短的一段代码。这类似于
sample
函数如何检查掩蔽https://github.com/mapbox/rasterio/blob/master/rasterio/sample.py#L46相关问题 更多 >
编程相关推荐