ArcGIS 栅格函数在线调用详解
ArcMap中的栅格函数调用
在ArcMap中可以对任何影像格式,包括栅格数据集、栅格目录和镶嵌数据集。在菜单栏–【窗口】–【影像分析】中可以调出影像分析面板,如下图所示
这些函数不同于ToolBox工具,Toolbox工具的特点就是每处理完一次都会生成一个新的栅格数据作为结果,整个过程会进行影像计算、重采样等,并占单独占用存储,一般处理时间比较长。栅格函数的性质是动态处理,函数与栅格数据的关系是引用关系,有点类似于PS里面的滤镜。在引用函数调用的时候不会生成新的数据,ArcMap会根据函数的设定动态对影像进行渲染,而且性能相当高。同时函数也是可以进行相互叠加的。
例如下图针对Landsat数据进行波段提取,提取第四波段。可以在栅格函数中直接使用【波段提取函数】,如下图
将波段组合设置为4,结果即马上生成一个动态的渲染图层,至显示第四波段数据,如下图所示
imageserver 中的影像
将影像发布为影像服务,同样也支持栅格函数。影像服务发布需要ArcGIS Server 的imageserver 授权。栅格数据集、栅格目录和镶嵌数据集都支持直接发布为影像服务。在ArcMap的目录中右键选择影像,可以将其发布成影像服务,如下图:
通过rest地址访问已发布的影像服务,可以看到其影像服务的功能。其中一项就是栅格函数
从代码中可以看出,关键部分是使用了RasterFunction接口,要调用什么样的函数,需要在 functionName 中设置其栅格函数名称。栅格函数的参数每个都不一样,这个就必须查看在线帮助了。例如波段提取函数名称为 ExtractBand ,在在线帮助中点击该名称,则跳转到它的参数说明和调用样例。如下图所示
在页面端可以直接调用出来,如下图
栅格函数模版需要在ArcMap中进行设计,其设计到栅格函数的调用和结果的渲染。
先说说前端渲染,目前ArcGIS JavaScript API 能支持的前端渲染是colorMap方式,就是类似栅格数据分类渲染,其构建方式如下
这种方式构建为数组,第一个数组值是栅格象元值,后面三个数值分别为RGB值。定义比较麻烦,需要对所用的象元值都给顶一个RGB值才能实现前端渲染。例如下面构建一个非常庞大的 colorMap 。
在栅格函数设置的时候,可以指定渲染方式,例如
这种方式构建工作量巨大,而且没有任何的界面设计器可用。目前还没有前端接口支持拉伸方式渲染,例如桌面端的【渲染地貌函数】采用的色带配置。
笔者做了一个例子,使用DEM数据进行地形渲染。【渲染地貌函数】并不在前端栅格函数的支持范围,其显示的渲染效果是拉伸方式,前端api同样不支持。这个例子很好的反映出服务器中栅格函数模版的重要性。
注意:笔者这里使用的模版存放在计算机桌面中,可以通过截图看清楚。在影像服务发布的时候指定栅格函数模版,无论栅格函数模版文件放在什么目录下,都能识别,因为arcgis server 最终会将这个模版文件拷贝到服务器能访问的目录中。
点击【确定】并发布影像服务,栅格函数模版会随着服务发布注册到对应的服务目录中。下图是从服务的属性中重新查看其模版情况,可以看到这个模版已经自动被拷贝到arcgisserver注册的目录中
然后停止对应的影像服务,在服务属性对应的【函数】项目导入模版文件。导入后重启对应的影像服务即可。
在浏览器中通过rest访问对应的影像服务,点击 rasterFunctionInfos 项,可以查看到对应的栅格函数模板的内容
从图上可以看出,影像服务上多了一个以栅格函数模版文件名为命名的自定义函数。这个函数名相当重要,在ArcGIS JavaScript API 的调用中需要使用到。
自定义栅格函数的调用与一般的调用方式没有任何不一样的地方,只需要在rasterFunction.functionName修改函数名称即可。下面是调用自定义函数的代码例子
具体的效果如下图所示

利用栅格函数模版的方式可以将很多常用的栅格表达方式注册到影像服务中,非常方便快速切换影像的显示方式,而且栅格函数模版是可以复用的。
总结
栅格函数虽然在ArcGIS10.0之后的版本才提出来,并在每一个ArcGIS版本中逐步完善和增加功能。从技术路线上看,栅格函数模版的方式依然是主流的调用方式(尽管这种方式很早就在imageserver 中使用),但前端调用的接口也越来越完善,Esri也在进一步开放其前端功能。在当前影像数据获取越来越便捷和廉价的情况下,影像的使用不仅仅是停留在浏览阶段,分析功能和多种表达方式也是越来越重要了。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!