有时 ArcGIS 开发者工具的广度以及对 Web 服务进行编码的挑战可能使初学者对服务器对象扩展和拦截器(SOE 和 SOI)望而生畏。本主题将讨论 GIS 开发人员编写自定义代码的一些常见 Web GIS 任务,并提供了无需编写 SOE 或 SOI 的替代方法。
创建打印布局
许多开发人员都使用自定义编码访问地图服务的布局对象,专门用于在其 Web 应用程序中增添高质量打印功能。他们使用 ArcObjects 处理高质量的地图(如在 ArcMap 及其整饰要素中),从而以大幅面生成可打印的文档等。
您可以使用 arcpy.mapping(适用于 ArcMap)或 arcpy.mp(适用于 ArcGIS Pro)Python 模块来编写布局构建和地图打印脚本。然后,可以通过地理处理服务或 web 工具显示脚本。通过 ArcPy,能够以非常精细的程度操作地图文档:您可以将图层动态添加到地图和更新其符号系统等。此外,还可以访问地图布局和操作要素,如文本和图像。
以下教程介绍如何共享自定义打印布局:
更改符号和渲染器
开发人员过去需要自定义代码的另一个原因是可以在地图服务中更改特定图层的符号系统。该工作流往往需要使用非池化服务,这限制了应用程序的可扩展性。有些开发人员想方设法使用池化服务实现此目的,尽管来回切换服务的状态可以满足多个用户的请求,但这往往会导致性能不佳,并且使开发人员为保持地图实例本身的健康状态承担了很大的责任。
ArcGIS web API 提供了一种能使用客户端要素图层或图形图层符号化要素的简单方法,从而可以在任何时候更改其渲染属性。理想的情况是将可见要素的所有几何体和属性都下载到客户端,这样客户端便可以很容易地使用应用程序开发人员所定义的任意颜色、宽度或分类间隔绘制要素。
要素图层技术对于专题制图、互动和突出要素等特别有效,但在处理数千个要素或非常复杂的面要素时存在不足。在这些情况下,最好的办法是在服务级别请求更改符号系统,并使用地图服务渲染地图图像。此操作以前需要使用 ArcObjects。
您可以在运行时更改地图服务的内容和符号系统。您再也无需使用精细的自定义代码更改地图服务图层的符号系统。相反,您可以根据每个请求决定要创建的地图中所使用的内容或符号系统。
可通过在要求绘制地图的 Web 服务请求中包括渲染器信息,以及图层的可见性典型信息和范围等完成在运行时定义地图服务中图层的符号系统。ArcGIS web API 包括实用程序类,这样就可以很容易地定义内容、渲染器、分类间隔和符号系统等。
要了解有关在地图服务中动态更改内容和符号系统的详细信息,请参阅关于动态图层。
Web 编辑
在 ArcGIS Server 的早期版本中,在 Web 上编辑数据只能通过自定义代码利用本地 (DCOM) 连接完成。 要素服务的引入消除了为此编写扩展模块的需要。
REST API 允许您在 Web 上编辑要素服务的要素。不仅可以通过 REST 执行编辑操作,还可以很方便地进行自定义,因为通过几何服务的 REST 实现可以显示许多常见的编辑方法,例如剪切、修剪、延伸、自动完成面和修整。 要素服务还支持版本化编辑。
旧版本:
在 ArcGIS 10.1 版本之前,可以利用非池化服务按照长事务模型来执行编辑。使用要素服务,所有操作均为无状态,这意味着不能在数据库级别进行回滚(尽管可以在应用程序中执行业务逻辑)。与 ArcGIS Web API 一样,这并不妨碍您实施撤消/恢复操作。
执行地理处理业务逻辑
一些 GIS 应用程序可运行一系列特定工具来执行高级的 GIS 业务逻辑。这些工具可预测森林的木材产量,确定餐馆的合适地点或评估毒云可能扩散的范围。许多开发人员都使用 自定义代码满足此功能。
在许多情况下,可以在模型构建器中表示这些过程,其中可采用图形化的方式将工具“链”在一起。这些地理处理模型可以显示为 Web 服务,并通过 Web 应用程序使用。这样做的好处非常明显:使用地理处理服务可以节省大量的编码工作。此外,还可以利用地理处理服务的异步执行,而这在通过编写自己的 ArcObjects 代码来实现时非常具有挑战性。
除了可以在模型构建器中合并数千个现存工具的灵活性以外,地理处理服务还能让您开发自定义工具。最简单的方法是创建既可自己运行也可结合模型内的其他工具运行的 Python 脚本。本主题介绍了早期通过 Web 使用 ArcPy 创建高质量地图的示例。
无论是使用 Python 还是其他语言,创建自定义工具的优点都是可以在不同的工作流程中重复使用它们,因为其操作类似于任何其他现有的工具。此外,可以在地理处理服务的异步执行模型内执行自定义代码,这对于长期运行的流程非常方便。
执行几何计算
地理处理服务非常有用,但是不再需要执行几何操作。
Esri 客户端 API(例如 ArcGIS API for JavaScript 和 ArcGIS Runtime SDK)提供了大量本地几何库,可用于执行投影、计算距离等。
如果您不打算使用这些客户端 API,请查看基于 SOAP 或 REST 的几何服务是否提供了您需要的方法。几何服务可以执行基本的 GIS 操作,例如缓冲、确定空间关系以及测量长度和面积。与使用地理处理服务相比,可以更简单和更快地在几何服务中调用一系列方法,并结合地图服务的查询功能和客户端逻辑。