GP 服务示例:所需数据
文件夹 |
DataOnDemand |
目的 |
使用一个由用户进行数字化的面来裁剪文件地理数据库中的数据集,从而输出 shapefile,然后创建一个以电子邮件形式发送给用户的 .zip 文件。 |
服务 |
PortlandDataMapService(地图服务),DataOnDemand(地理处理服务)。 |
地理处理任务 |
ClipZipAndEmail |
输入 |
感兴趣区域(面要素集)和用于发送数据的电子邮件地址。 |
输出 |
aoizip.zip,一个包含该数据的压缩文件。 |
数据 |
本示例使用俄勒冈州波特兰市的小数据集。 |
扩展模块 |
无。 |
注释 |
本服务保存在 ESRI 的 sampleserver 中 - 请参阅以下注释。这是一个裁剪与发送服务,如裁剪与发送示例中所述。 |
对应的文件夹
C:\arcgis\ArcTutor\GP Service Examples\DataOnDemand 包含工具和数据。
关于本示例
此 DataOnDemand 服务是裁剪与发送服务的另一个示例。在探讨此服务之前,请首先阅读裁剪与发送示例,因为将会对这两种服务的特点和功能进行对比,如下表所述。如果正在构建裁剪与发送服务,您可能需要将这两种服务的特点和功能都合并到您的服务中。
裁剪与发送示例 |
本示例 |
---|---|
用户选择要下载的图层。 |
下载一组固定的数据。 |
可以指定输出数据的空间参考。 |
无法指定空间参考 - 已被设置为正在裁剪的数据集的空间参考。 |
可以指定输出格式。 |
仅输出 shapefile。 |
使用模型、脚本和工具图层。使用地图文档发布服务。 |
不使用模型,而仅使用脚本。发布工具箱而不是地图文档。 |
裁剪地图文档中的图层。 |
裁剪数据集。(因为不存在包含图层的源地图文档,所以无法使用图层,只能使用数据集。) |
不下载感兴趣区域(用户进行数字化的裁剪多边形)。 |
下载感兴趣区域。 |
无法以电子邮件形式发送输出。 |
可通过在 ClipZipAndEmail 脚本(源文件是 DataOnDemand/Scripts/zipandemail.py)中指定电子邮件服务器名称来以电子邮件形式发送输出。 |
此服务的其他特点包括
- .zip 文件中包含一个用于查看已下载数据的 ArcMap 文档。
- Python 脚本可演示许多有用的方法,例如:
- 相对脚本位置查找数据
- 添加工具箱并使用其工具
- 导入脚本并在导入的脚本中调用例程
- 使用系统函数复制地图文档
此服务由 ESRI 提供
此服务保存在 ESRI 的 ArcGIS Online 服务器中。可按照以下方式试用此服务:
- 将 http://sampleserver1.arcgisonline.com/arcgis/services 作为 ArcGIS 服务器添加。
- 将 http://sampleserver2.arcgisonline.com/arcgis/services 作为 ArcGIS 服务器添加。
- 在 ArcMap 中,从 sampleserver1 添加 Portland/Portland_ESRI_LandBase_AGO 地图服务。
- 从 sampleserver2 将 Portland/ESRI_CadastralData_Portland 地理处理服务添加到 ArcToolbox。
- 展开 ESRI_CadastralData_Portland 工具箱,然后执行 ClipAndShip 任务。
DataOnDemand 文件夹中的脚本和工具与 ESRI_CadastralData_Portland 地理处理服务中 ClipAndShip 任务使用的脚本和工具相同。本示例中使用的数据存储在 DataOnDemand/ToolData/Portland.gdb 中,并且是 Portland_Portland_ESRI_LandBase_AGO 地图服务中所用数据的小子集。
sampleserver1 和 sampleserver2 中存放的地图服务和地理处理服务将来可能会更改。我们无法保证上述服务始终可用。
数据
本示例中使用的数据是俄勒冈州波特兰市内一小片区域的数据,该数据存放在 C:\arcgis\ArcTutor\GP Service Examples\DataOnDemand\ToolData\Portland.gdb 中。
ClipZipAndEmail 工具使用“要素集”变量,而该变量又需要一个用来定义要素类型和字段的方案。此方案存放在 C:\arcgis\ArcTutor\GP Service Examples\DataOnDemand\ToolData\Templates.gdb 中。
ToolData 文件夹也包括 Mapofzip.mxd,此文件包含在 ZIP 文件中并且显示已裁剪与发送的数据。
脚本
DataOnDemandTools 工具箱包含一个脚本工具 ClipZipAndEmail。此脚本工具的源是 DataOnDemand/Scripts/zipandemail.py。
使用 ClipZipAndEmail 工具之前,必须编辑代码并提供电子邮件服务器的名称。(可在 PythonWin 等应用程序中直接编辑 Python 源,也可右键单击脚本工具,然后单击“编辑”。)系统管理员应该能够为您提供电子邮件服务器的名称。
下面介绍此脚本的一些重要属性和特点:
- 要压缩的区域参数是一种要素集,因此需要一个方案。该方案在工具属性的“参数”选项卡中设置。
- 在 ClipZipAndEmail 脚本中,添加了 UtilityTools 工具箱,并且使用该工具箱中的 Zip 脚本工具。请参阅脚本中的 zipData() 例程。
- 在 ClipZipAndEmail 脚本中,emailZip() 例程导入 sendemail.py 脚本(存放在 DataOnDemand/Scripts 中)中的 send_mail() 例程,具体如下:
from sendemail import send_mail
发布
PortlandDataMapService 作为地图服务发布。
DataOnDemandTools 工具箱作为地理处理服务发布。
配置服务
要为数据配置此服务,需要编辑 ClipZipAndEmail 脚本工具。此脚本工具的源是 DataOnDemand/Scripts/zipandemail.py。可在 PythonWin 等应用程序中直接编辑 Python 源,也可右键单击脚本工具,然后单击编辑。
将需要更改数据位置和数据集列表。在主例程中,
if __name__ == '__main__':
查找 dataloc 变量的定义并对其进行更改:
global dataloc; dataloc = os.path.dirname(sys.path[0]) + g + "tooldata" + g + "portland.gdb" + g
该数据的位置与脚本的位置有关。
接着,更改要裁剪的数据集列表,该列表位于以下代码片段中:
ds = ["Streets" + g + "streets", \ "Water" + g + "StreamRoute", "Water" + g + "floodplain", "Water" + g + "riv_fill", \ "Transit" + g + "railroad", \ "Census" + g + "blockgrp", \ "Develop" + g + "Buildings", \ "Land" + g + "zoning", "Land" + g + "Parks", \ "Places" + g + "schools", "Places" + g + "hospital"]
最后,需要在 sendemail.py 脚本中提供电子邮件服务器的名称。需要修改的代码位于接近脚本顶部的位置:
def send_mail(send_from, send_to, subject, text, f=""): assert type(send_to)==list # Provide the name of your email server below # server = "ouremailserver.somewhere.com"