ArcGIS 开发者工具的广度以及对 Web 服务进行编码的挑战可能使初学者对服务器对象扩展和拦截器(SOE 和 SOI)望而生畏。 本主题将讨论 GIS 开发人员过去编写自定义代码的一些常见 Web GIS 任务,并提供了无需编写 SOE 或 SOI 的替代方法。
创建打印布局
许多开发人员都使用自定义编码访问地图服务的布局对象,专门用于在其 Web 应用程序中增添高质量打印功能。 他们之前使用 ArcObjects 处理高质量的地图及其整饰要素,从而以大幅面生成可打印的文档等。
现在,您可以使用 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 应用程序中使用。 这样做的好处非常明显:使用地理处理服务可以节省大量的编码工作。 此外,还可以利用地理处理服务的异步执行,而这在通过编写自己的 SOE 代码来实现时非常具有挑战性。
除了可以在模型构建器中合并数千个现存工具的灵活性以外,地理处理服务还能让您开发自定义工具。 最简单的方法是创建可单独运行或与模型内其他工具组合使用的 Python 脚本。 本主题介绍了早期通过 Web 使用 ArcPy 创建高质量地图的示例。
无论使用 Python 还是其他语言,创建自定义工具的优点在于可在不同工作流中重用它们,因为这与任何其他开箱即用的工具效果一样。 此外,可以在地理处理服务的异步执行模型内执行自定义代码,这对于长期运行的流程非常方便。
执行几何计算
地理处理服务非常有用,但是不再需要执行几何操作。
Esri 客户端 API(例如 ArcGIS Maps SDK for JavaScript 和 ArcGIS Runtime SDK)提供了大量本地几何库,可用于执行投影、计算距离等。
如果您不打算使用这些客户端 API,请查看基于 SOAP 或 REST 的几何服务是否提供了您需要的方法。 几何服务可用于执行基本 GIS 操作(如缓冲)、确定空间关系以及测量长度和面积。 与使用地理处理服务相比,可以更简单和更快地在几何服务中调用一系列方法,并结合地图服务的查询功能和客户端逻辑。