摘要
此函数将地址定位器转换为服务定义草稿 (.sddraft) 文件,该文件可用于创建发布地理编码服务的服务定义。
讨论
CreateGeocodeSDDraft 是使用 ArcPy 将地址定位器自动发布到地理编码服务的第一步。通过 CreateGeocodeSDDraft 创建的输出是服务定义草稿 (.sddraft) 文件。服务定义草稿由地址定位器属性、服务器信息和一组服务属性组合而成。
所有地理编码服务都需要地址定位器。地址定位器是 ArcGIS 中进行地理编码的主要工具,该工具包含了执行地址匹配所需的所有数据。可使用 ArcCatalog、ArcGIS Desktop 中的目录窗口或创建地址定位器地理处理工具来创建地址定位器。有关详细的分步说明,请参阅 ArcGIS 帮助中的创建地址定位器。将多个定位器合为一体的复合定位器也可发布到 ArcGIS Server。有关详细信息,请参阅创建复合地址定位器。
服务器信息包括服务器连接、发布到的服务器的类型、服务的元数据(项目信息)和数据参考(是否将数据复制到服务器)。
服务属性包括服务支持的地理编码和反向地理编码等操作、对单个地址进行地理编码时服务返回的最大候选项数量,或者执行地理编码批处理时每个批处理作业中处理的最大记录数。
此函数会返回字典,其中包含应在创建服务定义文件之前解决的错误和其他潜在问题。
可在特定服务器连接信息未知的情况下编写服务定义草稿文件。在这种情况下,可以忽略 connection_file_path 参数;但是必须提供 server_type。可在使用上载服务定义工具发布服务定义草稿文件后提供服务器连接。
随后可使用过渡服务工具将服务定义草稿文件转换为完全合并的服务定义 (.sd) 文件。过渡过程会编译成功发布 GIS 资源所需的所有必要信息。如果未将数据注册到服务器,将在过渡服务定义草稿文件时添加这些数据。最后,可以使用上载服务定义工具上载服务定义文件并将其作为 GIS 服务发布到指定的 GIS 服务器。此步骤将获取服务定义文件、将其复制到服务器、提取所需信息并发布 GIS 资源。有关详细信息,请参阅发布工具集概述。
语法
CreateGeocodeSDDraft (loc_path, out_sddraft, service_name, {server_type}, {connection_file_path}, {copy_data_to_server}, {folder_name}, {summary}, {tags}, {max_result_size}, {max_batch_size}, {suggested_batch_size}, {supported_operations})
参数 | 说明 | 数据类型 |
loc_path | 表示地址定位器目录路径的字符串。可发布的有效地址定位器格式为文件夹中的定位器文件 (.loc) 或地理数据库中的定位器。 | String |
out_sddraft | 用于表示输出服务定义草稿 (.sddraft) 文件的路径和文件名的字符串。 | String |
service_name | 用于表示服务名称的字符串。该名称用于向用户显示并识别服务。名称只能包含字母数字字符和下划线。不允许使用空格或特殊字符。名称长度不能超过 120 个字符。 | String |
server_type | 表示服务器类型的字符串。如果未提供 connection_file_path 参数,则必须提供 server_type。如果提供了 connection_file_path 参数,则可从连接文件获取 server_type。在这种情况下,您可以选择 FROM_CONNECTION_FILE 或完全跳过该参数。
(默认值为 ARCGIS_SERVER) | String |
connection_file_path | 用于表示 ArcGIS Server 连接文件 (.ags) 的路径和文件名的字符串。 可使用 CreateGISServerConnectionFile 函数创建新的连接文件。 | String |
copy_data_to_server | 指示地址定位器中所引用的数据是否复制到服务器的布尔值。copy_data_to_server 参数仅在 server_type 为 ARCGIS_SERVER 且 connection_file_path 未指定的情况下使用。如果 connection_file_path 已指定,则会使用服务器的已注册数据存储。例如,如果地址定位器中的数据已注册到服务器,则 copy_data_to_server 将始终为 False。相反,如果地址定位器中的数据未注册到服务器,则 copy_data_to_server 将始终为 True。 (默认值为 False) | Boolean |
folder_name | 用于表示您要向其中发布服务定义的文件夹名称的字符串。如果文件夹当前不存在,则将在服务定义发布为服务时创建文件夹。默认的文件夹为服务器根级别。 (默认值为 None) | String |
summary | 用于表示项目描述摘要的字符串。 使用此参数可以覆盖用户界面摘要,如果摘要不存在,则将提供摘要。 (默认值为 None) | String |
tags | 用于表示项目描述标签的字符串。 使用此参数可以覆盖用户界面标签,如果标签不存在,则将提供标签。要指定多个标签,请在字符串中以逗号分隔各标签。 (默认值为 None) | String |
max_result_size | 地理编码单个地址时服务返回的最大候选项数。 (默认值为 500) | Integer |
max_batch_size | 执行批量地理编码时每次批处理作业要处理的最大记录数。 (默认值为 1000) | Integer |
suggested_batch_size | 执行批量地理编码时每次批处理作业要处理的记录的建议数量。 (默认值为 1000) | Integer |
supported_operations [supported_operations,...] | 服务所支持的内置操作。应将参数指定为包含一个或多个下列字符串关键字的列表:
例如,要将服务指定为仅支持地理编码操作而不允许任何其他反向地理编码操作,则需将参数指定为 ["GEOCODE"]。 (默认值为 [GEOCODE, REVERSE_GEOCODE, SUGGEST]) | List |
返回值
数据类型 | 说明 |
Dictionary | 返回由信息性消息、警告和错误组成的字典。 |
代码示例
发布地理编码服务
下列脚本演示将地址定位器发布为地理编码服务的完整工作流。发布工作流中的第一步是使用 CreateGeocodeSDDraft 函数基于地址定位器创建服务定义草稿文件 (.sddraft)。然后,使用 StageService 函数基于服务定义草稿文件创建服务定义文件 (.sd)。最后,使用 UploadServiceDefinition 函数将服务定义文件作为服务发布到 GIS 服务器。
import arcpy
import pprint
#Overwrite any existing outputs
arcpy.env.overwriteOutput = True
locator_path = "C:\\Data\\Locators\Atlanta"
sddraft_file = "C:\\Output\\Atlanta.sddraft"
sd_file = "C:\\Output\\Atlanta.sd"
service_name = "Atlanta"
summary = "Address locator for the city of Atlanta"
tags = "address, locator, geocode"
gis_server_connection_file = "C:\\Data\\server_connection.ags"
#Create the sd draft file
analyze_messages = arcpy.CreateGeocodeSDDraft(locator_path, sddraft_file, service_name,
connection_file_path=gis_server_connection_file,
summary=summary, tags=tags, max_result_size=20,
max_batch_size=500, suggested_batch_size=150)
#stage and upload the service if the sddraft analysis did not contain errors
if analyze_messages['errors'] == {}:
try:
# Execute StageService to convert sddraft file to a service definition (sd) file
arcpy.server.StageService(sddraft_file, sd_file)
# Execute UploadServiceDefinition to publish the service definition file as a service
arcpy.server.UploadServiceDefinition(sd_file, gis_server_connection_file)
print "The geocode service was successfully published"
except arcpy.ExecuteError as ex:
print "An error occured"
print arcpy.GetMessages(2)
else:
# if the sddraft analysis contained errors, display them
print "Error were returned when creating service definition draft"
pprint.pprint(analyze_messages['errors'], indent=2)