如何通过ArcGIS Python API访问镶嵌数据集中的单个栅格
解决ArcGIS Python API中对镶嵌数据集特定栅格应用栅格函数的问题
问题原因
影像服务的query()方法仅针对镶嵌数据集的属性表执行查询,返回的是矢量要素集合(FeatureSet),无法直接获取栅格对象,因此不能用于提取特定栅格进行函数处理。
解决方案
以下两种方法可实现对镶嵌数据集中特定栅格应用栅格函数:
方法1:通过export_image()提取栅格后处理
利用镶嵌规则(Mosaic Rule)锁定目标栅格,导出为本地或内存栅格对象,再应用栅格函数:
from arcgis.raster import Raster from arcgis.raster.functions import apply # 定义镶嵌规则,锁定OBJECTID为2834的栅格 mosaic_rule = { "mosaicMethod": "esriMosaicLockRaster", "lockRasterIds": [2834] } # 导出指定栅格为临时文件(Jupyter环境可指定内存路径) exported_file = lyr1.export_image( mosaic_rule=mosaic_rule, format="tiff", save_folder="./temp", save_file="target_raster.tif" ) # 转为Raster对象并应用栅格函数(示例为NDVI) raster_obj = Raster(exported_file) processed_raster = apply(raster_obj, "NDVI", {"BandIndexes": "5,4"}) # 在Jupyter中显示处理结果 processed_raster
方法2:服务端直接处理(无需下载栅格)
使用mosaic函数结合镶嵌规则,直接在Portal服务端筛选目标栅格并应用函数,效率更高:
from arcgis.raster.functions import mosaic, apply # 定义镶嵌规则锁定目标栅格 mosaic_rule = { "mosaicMethod": "esriMosaicLockRaster", "lockRasterIds": [2834] } # 筛选目标栅格并应用栅格函数 target_raster = mosaic(lyr1, mosaic_rule=mosaic_rule) processed_raster = apply(target_raster, "NDVI", {"BandIndexes": "5,4"}) # 显示处理结果 processed_raster
注意事项
- 确保账号拥有该影像服务的处理权限,否则无法执行服务端操作或导出
- 若栅格数据量较大,优先选择方法2,避免本地下载耗时
- 可通过
lyr1.properties查看镶嵌数据集属性,确认目标栅格的OBJECTID或其他标识字段正确性
内容的提问来源于stack exchange,提问作者fed
相关产品推荐
相关产品推荐

