教程:发布 WFS-T 服务
本教程介绍了如何使用 ArcMap 将带事务的 WFS 服务 (WFS-T) 发布到 ArcGIS Server。WFS 是开放地理空间联盟 (OGC) 针对于在 Internet 上操作地理要素而发布的规范。带事务的 WFS 服务 (WFS-T) 允许 WFS 客户端通过 WFS 服务对源数据库中的数据进行编辑(插入、删除及更新)。
当发布带有 WFS 功能的地图服务或地理数据服务时,可以通过 OGC 兼容的 WFS 客户端(包括 ArcGIS for Desktop 中的 适用于 Desktop 的 ArcGIS Data Interoperability 扩展模块)访问数据。WFS 客户端也可以查看对数据所做的最新更改。如果您不了解 WFS 服务并且想要在学习本教程之前了解更多信息,请参阅 WFS 服务。
WFS 服务支持 Esri 数据源中的简单要素,如 shapefile 和地理数据库。但是,如果要在服务上启用事务 (WFS-T),那么您希望编辑的所有数据都必须存储在 ArcSDE 地理数据库中。该教程说明了处理版本化数据时应使用的工作流。
开始学习本教程前
如果您刚刚安装 ArcGIS Server,则在连接到服务器和发布服务之前,需要完成一些准备工作:
- 有关如何配置 ArcGIS Server 站点的详细信息,请参阅本帮助系统的安装后配置入门部分。
- 要了解如何使 GIS 资源所引用的数据对于服务器可用,请参阅主题使数据能被 ArcGIS Server 访问。
在地理数据服务与地图服务之间作出选择
对于 WFS 服务,您可以选择是发布地理数据服务还是发布地图服务。当您选择要创建的服务类型时,应注意到二者之间的一些不同之处。以下各部分概述了地图服务与地理数据服务的可用功能,以帮助确定哪种服务类型最适合您的要求。
地图服务
WFS 地图服务代表了一个地图文档,其他用户可以通过 internet 或者任何 OGC 兼容的客户端访问这个文档。对于通过服务发布的数据,具有 WFS 功能的地图服务这种形式赋予您许多数据控制权限。以下是建立地图服务的一些常见原因:
- 与地理数据服务不同,单个地图服务可能包括来自于各种源的数据,如,来自各种地理数据库(文件和 ArcSDE)以及 shapefile 的数据。
- 您可以选择要通过地图服务显示哪些要素类。
- 您可以在地图文档中重命名要素类,这样服务将不显示数据源的真实名称。
这里还有一些关于 WFS 地图服务的限制。当由地图文档发布 WFS 服务时,请注意以下事项:
- 地图文档只是对 WFS 服务中所有可用图层的一种说明。在图层级别定义的符号系统、查询定义以及字段别名将不会被传递到 WFS 服务中,因为该服务的目的在于显示数据中的要素。要通过 OGC 规范显示地图的可视属性,请使用 WMS 服务。
- 地图中两个或两个以上的图层不可以引用同一个要素类。
- 地图中两个或两个以上的图层不可以拥有相同的名称。
- 因为 WFS 仅作用于要素,所以地图中的任何栅格图层都将从服务中排除。
- 不显示非空间表。
- 如果您想要 WFS 服务支持编辑事务 (WFS-T),那么地图中所有图层的源数据必须来自同一工作空间,例如同一 ArcSDE 地理数据库。
地理数据服务
您可以利用 WFS 地理数据服务通过 Internet 或任何 OGC 兼容 WFS 客户端来访问 ArcSDE 地理数据库或文件地理数据库。当通过地理数据服务创建 WFS 服务时,请牢记地理数据库中的所有要素类都将在服务中显示是非常重要的。
当您需要访问远程位置上的地理数据库时,地理数据服务是非常有用的。例如,一家公司可能要建立 ArcSDE 数据库来管理洛杉矶与纽约办事处的数据。一旦数据库创建完成,每个办事处都可以在 Internet 上使用地理数据服务发布其 ArcSDE 地理数据库。
准备用于 WFS-T 服务的数据
在创建具有读写权限的 WFS 服务之前,需要按照以下一些初始要求来设置数据:
- 数据必须加载到 ArcSDE 地理数据库。
- 如果要使用版本化数据,必须将其注册为版本。
- 版本必须为 WFS 编辑人员专门制定一个版本。如果不存在任何版本,则必须创建一个版本。
- 必须对指定的 WFS 编辑人员授予 SDE 连接文件的权限以执行编辑操作。
按照以下步骤为包含版本化数据的 WFS-T 服务准备数据:
- 在 ArcCatalog 中或 ArcGIS for Desktop 的目录 窗口中,加载要发布到 ArcSDE 地理数据库中的数据。关于加载数据的详细信息,请参阅在 ArcCatalog 中加载数据。
- 将数据注册为版本,方法为右键单击数据集,然后从快捷菜单中选择将数据注册为版本。有关详细信息,请参阅将数据注册为版本。
- 现在数据已被版本化,必须专门指定一个版本供 WFS 用户编辑。如果不存在此版本,请右键单击 ArcSDE 连接并选择 管理 > 管理地理数据库。
- 在“连接”窗口中,单击版本选项卡。
- 右键单击希望创建子版本的地理数据库版本,然后单击新建。
- 输入新版本的名称。如果是用户而非创建者要编辑此数据,则必须将权限选项设置为公共。
对于地图服务
要确保所创建的地图服务能够发布相应的数据,必须更新地图文档,以便地图文档引用新近创建的 WFS 版本。
- 在 ArcMap 中打开地图文档。
- 在 ArcMap 内容列表中,单击按源列出 。
- 右键单击地理数据库连接,然后选择切换版本。
- 在切换版本 对话框中,选择专用于 WFS 用户的版本,然后单击确定。
- 保存对地图文档所做的更改。
对于地理数据服务
要确保所创建的地理数据服务能够发布相应的数据,必须更新地理数据库的连接属性,以便这些属性引用已经创建的新 WFS 版本。
- 在 ArcCatalog 中或在 ArcGIS for Desktop 的目录 窗口中,右键单击地理数据库连接,然后选择管理 > 管理地理数据库。
- 在管理 对话框中,单击版本。
- 选择专用于 WFS 用户的版本,然后单击确定。
发布 WFS-T 服务到 ArcGIS Server
要初步了解 WFS-T 服务的发布,请执行以下步骤。
- 按照下表中基于要发布的服务类型的说明进行操作:
选项
描述
如果要发布 WFS-T 地图服务...
...在 ArcMap 中打开地图文档并选择文件 > 共享为 > 服务。单击下一步。
如果要发布 WFS-T 地理数据服务...
...浏览到 ArcCatalog 或目录 窗口中的 ArcSDE 地理数据库或文件地理数据库,右键单击它,然后选择共享为地理数据服务。
- 在共享为服务 窗口中,选择发布服务。单击下一步。
- 在发布服务对话框中,单击连接到 ArcGIS Server 以创建一个到服务器的新连接。
- 在添加 ArcGIS Server 窗口中,选择发布 GIS 服务。单击下一步。
- 对于服务器 URL,输入要连接的 ArcGIS Server 站点的 URL。例如,http://myserver:6080/arcgis。
- 在服务器类型下拉列表中选择 ArcGIS Server。
- 在发布过程中,将创建服务定义文件并将其临时存储到本地磁盘上。发布过程完成后,服务定义将上传到服务器并删除本地文件。考虑到本教程的目的,接受默认的过渡文件夹并继续。
- 如果服务器管理员已为您的站点启用了安全功能,请输入用户名和密码。单击完成。
- 还可以在发布服务 窗口中,输入新的服务名称。名称长度不能超过 120 个字符,并且只能包含字母数字字符和下划线。单击下一步。
- 默认情况下,服务会发布到 ArcGIS Server 的根文件夹下。也可将服务组织到根文件夹下的子文件夹中。选择要将服务发布到其中的目标文件夹,或创建一个新的文件夹来存储服务。单击继续。
- 服务编辑器 随即显示。您将使用服务编辑器 选择用户可对 WFS-T 服务执行的操作,还可对服务器显示服务的方式进行精细控制。单击服务功能选项卡。
- 默认情况下,自动启用了地图和 KML。选择 WFS。
- 在服务编辑器 的左侧窗格中,单击 WFS。使用此窗格可选择如何配置 WFS 服务的属性。通过提供 WFS 服务属性,用户可对服务发布程序有更好的了解。
- URL 字段显示了客户端用来访问 WFS 服务的 URL。URL 格式如下:http://<服务器名称>:6080/arcgis/services/<文件夹名称(如果适用)>/<服务名称>/MapServer/WFSServer。注:
复制并保存 WFS 服务 URL。您需要用这个 URL 来执行本教程中的其他步骤。
- 如果要使用系统生成的服务功能文件发布 WFS 服务,则使用默认的在下方输入服务属性选项。“名称”、“标题”和“在线资源”字段会自动填充,不应对其进行修改。也可使用列表中的字段填充其他属性。有关详细信息,请参阅 WFS 服务的可用属性。
- 如果要配置 WFS 服务以使用外部功能文件,请选择使用外部功能文件。要使用此选项,您必须已创建了一个 WFS 功能文件。有关详细信息,请参阅对 WFS 服务使用外部功能文件。
- URL 字段显示了客户端用来访问 WFS 服务的 URL。URL 格式如下:http://<服务器名称>:6080/arcgis/services/<文件夹名称(如果适用)>/<服务名称>/MapServer/WFSServer。
- 在 WFS 面板底部,单击启用事务复选框。这样 WFS 用户可以编辑源数据库中的数据并对其应用更改。
- 单击分析 。该操作用于对地图文档或地理数据库进行检查,看其是否能够发布到服务器。提示:
配置 WFS-T 服务时为获得更多视图区域,请单击服务编辑器 顶部的折叠 按钮。
- 在准备 窗口中修复任何错误 ;必须在发布前完成此操作。另外,您还可以修复警告和通知消息,以进一步完善 WFS-T 服务的性能和显示。有关解决这些问题的详细信息,请参阅分析 GIS 资源。注:
可将文件夹和地理数据库注册到 ArcGIS Server 站点,从而确保服务器可识别并使用数据。如果继续以下步骤,那么 GIS 资源所引用的来自取消注册 的文件夹或地理数据库的任何数据都将在发布时复制到服务器。这是一种预防性措施,可确保服务器能够访问服务所使用的所有数据。有关将文件夹或地理数据库注册到 ArcGIS Server 站点的完整说明,请参阅使用 ArcGIS for Desktop 将数据注册到 ArcGIS Server。
- 还可以在服务编辑器 中,单击预览 。这样您便可以了解在 Web 上查看地图时 WFS-T 服务的外观。有关详细信息,请参阅预览地图。
- 修复了地图文档或地理数据库中的错误后,请单击发布 。
使用 WFS 服务
一旦发布了 WFS 服务,您可以在支持 WFS 1.1 与 GML 的简单要素规范的任何客户端(包括 Web 浏览器)中使用 WFS 服务。Web 浏览器是 WFS 服务最简单的客户端之一。您可以通过 HTTP 请求信息,然后响应或者异常会通过浏览器返回。
请按照以下步骤通过 Web 浏览器访问 WFS 服务:
- 打开 Web 浏览器。
- 执行 GetCapabilities、DescribeFeatureType 和 GetFeature 请求,如以下部分中所示。
GetCapabilities
此请求将通过服务以 GML 格式返回所有可用的要素类型与功能。要使用 GetCapabilities 操作,请复制 WFS 服务 URL 并将其粘贴到地址栏中,然后在 URL 末尾添加 ?request=getcapabilities。
URL 示例: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=GetCapabilities
下图是由 GetCapabilities 操作返回的功能示例:
GetCapabilities 也可返回所有可用要素类和表的列表:
DescribeFeatureType
该请求描述了有关 WFS 服务中一个或多个要素的字段信息。这包括字段名称、字段类型、允许的最小与最大字段值以及在要素类或者表的字段上所设置的任何其他限制。
要使用 DescribeFeatureType 操作,请复制 WFS URL 并将其粘贴到地址栏中,然后在 URL 末尾添加 ?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0。这将返回有关要素服务中各可用要素类型和表的所有字段信息。
URL 示例: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0
添加过滤器
通过将下列带有要素类型名称或表名称的请求添加到 URL 的末尾,您也可以指定您需要其字段信息的单个要素类或表:?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=<在此输入要素类型>&VERSION=1.1.0。
了解有关 WFS 服务可用的不同过滤器的详细信息,请参阅在 Web 浏览器中与 WFS 服务进行通信。
在下例中,DescribeFeatureType 请求用于识别名为 cities 的要素类型的字段信息。
URL 示例: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=cities&VERSION=1.1.0
GetFeature
该请求通过 WFS 服务返回有关可用的指定要素类型的信息。
要在 Web 浏览器中使用 GetFeature 操作,请复制 WFS URL 并将其粘贴到地址栏中,然后在 URL 末尾添加 ?request=getFeature&typename=<在此输入要素类型>。这将返回有关此要素类型中各个要素和行的所有属性和几何信息。
URL 示例: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities
添加过滤器
您也可以在请求中添加过滤器来优化返回的结果。例如,可以请求返回指定坐标范围内的所有城市。在下例中,两个城市位于指定的坐标范围内。了解有关 WFS 服务可用的不同过滤器的详细信息,请参阅在 Web 浏览器中与 WFS 服务进行通信主题。
URL 示例: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities&BBOX=46.90,-76.21,42.12,-72.88
使用 Data Interoperability 扩展模块连接 WFS 服务
可以使用 Data Interoperability 扩展模块读取和写入 ArcGIS 格式或非 ArcGIS 格式的数据。您可使用位于 ArcCatalog 中或 ArcGIS for Desktop 的目录 窗口中的“互操作连接”工具直接连接到外部 Esri 数据格式的服务(包括 WFS 服务)。一旦建立了连接,数据源就会出现在目录树中的互操作连接条目下。连接就像任何其他数据集一样,您可以将连接添加到内容列表中,也可以在地理处理工具中使用它。要了解有关如何使用 Data Interoperability 扩展模块连接到 WFS 服务的详细信息,请参阅如何通过 ArcGIS for Desktop 使用 WFS。
管理通过包含版本化数据的 WFS-T 服务创建的编辑
要管理通过 WFS-T 服务所做的编辑,创建一个有效的工作流十分重要。假设您已按照推荐的方法创建了单独的供 WFS-T 编辑人员使用的 WFS 版本,则所构建的系统应该与下图类似:
在本示例中,WFS-T 编辑人员与 ArcMap 编辑人员使用不同的版本,这样每个组可以拥有各自独立的地理数据库视图。ArcMap 编辑人员直接通过 ArcMap 编辑“默认”版本。WFS-T 编辑人员可通过 Internet 访问 WFS 服务。这就允许 WFS-T 编辑人员能在作为“默认”版本子版本创建的 WFS 版本中进行编辑。要了解有关版本的详细信息,请参阅桌面帮助系统中的版本化快速浏览。
要保持这两个版本同步,可定期运行相应的过程,以便通过“默认”版本的编辑内容更新 WFS 版本以及通过 WFS 版本的编辑内容更新“默认”版本。在任何版本化系统的编辑工作流中,这是一个两步过程,称为协调过程和提交过程。该过程可自动执行,也可通过编辑人员(取决于用户的权限)或数据库管理员进行管理。要了解有关协调过程和提交过程的详细信息,请参阅版本编辑过程快速浏览。
在运行时,协调操作将从“默认”版本中提取更新信息,然后放入 WFS 版本上的当前编辑会话中。如果在这两种版本中都对同一要素都做了编辑,则可能发生冲突。您可以将冲突解决方式设置为自动解决冲突,也可以选择通过冲突解决对话框手动解决冲突。
处理完冲突后可运行提交操作。该过程可将 WFS 版本中所做的更改合并到“默认”版本中。
在下图中对整个协调过程和提交过程进行了汇总。其中,在协调期间,WFS 版本从“默认”版本中提取更新信息。在合并更改之后,WFS 版本使用提交操作将其更新信息提交到“默认”版本中。现在,“默认”版本与 WFS 版本所包含的内容即相同。
在完成协调过程和提交过程后,这两个版本都是最新版本,具有要素的当前最新制图表示,然后 WFS 编辑人员可以再继续进行编辑。
要特别注意在运行协调过程和提交过程时是否有未完成的锁,因为如果存在未完成的锁,系统不会允许继续执行该过程。这就可以防止 WFS-T 客户端锁定的要素与协调过程和提交过程更改的要素之间发生冲突。此外,运行协调过程和提交过程也会锁住 WFS-T 版本,以防止在协调过程和提交过程期间 WFS-T 编辑人员执行任何锁定和事务调用。
为适应该防护措施,推荐在所有 WFS-T 编辑人员预先知道的固定时间运行协调过程和提交过程。这样,各个编辑人员可以获得提交到数据库中的各自的更改内容。在协调和提交之前,管理员可能也需要将锁从锁表中手动删除。
要了解有关 WFS-T 锁定方案的详细信息,请参阅 WFS 服务。