You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:40:17