arcpy.geocoding.CreateLocator(country_code, primary_reference_data, field_mapping, out_locator, language_code, {alternatename_tables}, {alternate_field_mapping}, {custom_output_fields}, {precision_type}, {version_compatibility})
|
名称
|
说明
|
数据类型
|
|
country_code
|
指定将于何处将特定于国家/地区的地理编码逻辑应用于定位器的参考数据。
可使用 AS_DEFINED_IN_DATA 对其进行指定,并且可从 field_mapping 中的 primary_reference_data 内映射某一值,或通过指定三个字符的国家/地区代码名称,例如 USA(美国)、CAN(加拿大)或 PRI(波多黎各),将其应用于整个数据集。
它提供了一个国家/地区模板,该模板中包含供要创建的定位器的指定国家/地区的 field_mapping 参数使用的预期字段名称。
|
String
|
|
primary_reference_data
[[reference_data, {role}],...]
|
参考数据要素类及其将用于创建定位器的角色。 每个角色只能使用一个主表。
表示为服务的要素类作为数据类型,支持用作主要参考数据。
注意:
如果为主要参考数据定义了定义查询或存在选定要素,则在创建定位器时,将仅包含查询要素和所选要素。
注:
如果使用包含数百万个要素的参考数据创建定位器,则包含临时目录的驱动器上的可用磁盘空间必须至少为数据大小的 3 到 4 倍,原因是在将定位器复制到输出位置之前,需将用于构建定位器的文件写入此位置。 如果没有足够的磁盘空间,则一旦空间不足,工具将失败。 另外,在创建大的定位器时,您的计算机必须具备足够的 RAM,才能处理占用较大内存的进程。
值表列:
|
Value Table
|
|
field_mapping
[field_mapping,...]
|
主参考数据集字段到定位器角色所支持字段的映射。 此参数中的每个字段映射均采用如下格式,其中 <role name> 为定位器角色名称,<locator role field name> 为定位器角色支持的字段的名称,<primary data> 为在 primary_reference_data 参数中使用的数据的名称,<primary data field name> 为主要参考数据集中的字段的名称:
下面是主要 field_mapping 的示例:
# <role name>.<locator role field name> <primary data>.<primary data field name>
# This shows an example:
primary_reference_data_field_map = \
["StreetAddress.HOUSE_NUMBER_FROM_LEFT 'streets'.L_F_ADD",\
"StreetAddress.HOUSE_NUMBER_TO_LEFT 'streets'.L_T_ADD",\
"StreetAddress.HOUSE_NUMBER_FROM_RIGHT 'streets'.R_F_ADD",\
"StreetAddress.HOUSE_NUMBER_TO_RIGHT 'streets'.R_T_ADD",\
"StreetAddress.STREET_PREFIX_DIR 'streets'.PREFIX",\
"StreetAddress.STREET_PREFIX_TYPE 'streets'.PRE_TYPE",\
"StreetAddress.STREET_NAME 'streets'.NAME",\
"StreetAddress.STREET_SUFFIX_TYPE 'streets'.TYPE",\
"StreetAddress.STREET_SUFFIX_DIR 'streets'.SUFFIX",\
"StreetAddress.CITY_LEFT 'streets'.CITYL",\
"StreetAddress.CITY_RIGHT 'streets'.CITYR",\
"StreetAddress.REGION_LEFT 'streets'.STATE_ABBR",\
"StreetAddress.REGION_RIGHT 'streets'.STATE_ABBR",\
"StreetAddress.POSTAL_LEFT 'streets'.ZIPL",\
"StreetAddress.POSTAL_RIGHT 'streets'.ZIPR"]
从 primary_reference_data 参数映射每个表的相关字段。 如果不将定位器角色所使用的可选参考数据字段映射到参考数据集中的字段,则无需使用 '' 来代替字段名,以此指定不存在任何映射。
要确定定位器角色所使用的参考数据字段的 <locator role field name> 值,请在 ArcGIS Pro 中打开 创建定位器工具并选择相应的定位器角色。 出现在 字段映射参数的 字段名称列中的名称就是字段角色的字段名称。
注:
如果正在使用的是备用名称表,请映射 primary_reference_data 参数值中的连接 ID。
要添加自定义输出字段,则必须在 custom_output_fields 和 field_mapping 参数中定义字段名称。 field_mapping 参数将使用格式 '<locator role field name> <primary data field name>',其中 <locator role field name> 被定义为 'RoleName.CustomFieldName',<primary data field name> 为主参考数据集中字段的名称,如以上示例中的映射字段所示。 若将自定义字段添加至“街道地址”角色,则您需要映射街道两侧的 'StreetAddress.CustomFieldName_Left' 和 'StreetAddress.CustomFieldName_Right'。
|
String
|
|
out_locator
|
输出地址定位器文件。
|
Address Locator
|
|
language_code
|
指定将于何处将特定于语言的地理编码逻辑应用于定位器的参考数据。
若主要参考数据中存在语言代码字段,则提供语言代码可改善地理编码的结果。
可通过将 AS_DEFINED_IN_DATA 设置为 language_code 值并从 field_mapping 中的 primary_reference_data 内映射某一值来对其进行指定,或通过使用表示地址语言的三字符语言代码(如 ENG 表示英语)来指定某一语言,从而将其应用于整个数据集。
|
String
|
|
alternatename_tables
[alternatename_tables,...]
(可选)
|
包含主角色表中备用要素名称的表。
表示为服务的表作为数据类型,支持用作备用名称表。
注意:
如果为备用名称表定义了定义查询或存在选定记录,则在创建定位器时,将仅包含查询记录和所选记录。
值表列:
|
Value Table
|
|
alternate_field_mapping
[alternate_field_mapping,...]
(可选)
|
将备用名称表字段映射到定位器角色所支持的备用数据字段。 每个字段映射必须使用以下格式,其中 <alternate name table role> 是备用名称表角色的名称,<locator role alternate field name> 是备用名称表定位器角色支持的备用数据字段的名称,<alternate data table> 是备用名称表的名称,<alternate data table field name> 是备用名称表中的字段的名称。 映射 alternatename_tables 中每个表的相关字段。
以下是 alternatename_tables 的 alternate_field_mapping 示例。
# <alternate name table role>.<locator role alternate field name> <alternate data table>.<alternate data table field name>
# This shows an example:
alternate_data__table_field_map = \
["AlternateStreetName.STREET_NAME_JOIN_ID 'altname'.JOINID",\
"AlternateStreetName.STREET_PREFIX_DIR 'altname'.PRE_DIR",\
"AlternateStreetName.STREET_PREFIX_TYPE 'altname'.PRE_TYPE",\
"AlternateStreetName.STREET_NAME 'altname'.ST_NAME",\
"AlternateStreetName.STREET_SUFFIX_TYPE 'altname'.ST_TYPE",\
"AlternateStreetName.STREET_SUFFIX_DIR 'altname'.SUF_DIR"]
注:
如果数据已归一化且主表不包含城市名称值(但备用名称表中包含),则可将“主要名称指标”字段映射至备用名称表中的字段,该字段包含一个值,该值指示了记录是否为主字段(例如,true/false 或 Yes/No)。 如果未映射此字段,则备用名称表中的第一条记录将用作主值。
|
String
|
|
custom_output_fields
[custom_output_fields,...]
(可选)
|
向定位器添加用户定义的输出字段。 针对此参数指定的值将定义在地理编码结果中返回的自定义输出字段的名称;但必须将各个新字段映射至参考数据中的字段。 这个新输出字段将应用于定位器中所使用的全部角色。 如果定位器角色具有左侧和右侧之分,则字段名称的末尾将附加 _left 和 _right。 定位器中支持的最大字段数量为 50。
如果参考数据中的字段没有数据,则定位器将不会返回自定义输出字段,也不会在 定位器属性对话框的 输出字段选项卡上列出
注:
您必须首先将自定义输出字段名称纳入 field_mapping 参数;然后在 custom_output_fields 参数中列出这些名称。
|
String
|
|
precision_type
(可选)
|
指定定位器的精度。
注:
使用 GLOBAL_EXTRA_HIGH 或 LOCAL_EXTRA_HIGH 选项创建的定位器可用于 ArcGIS Pro 2.6 或更高版本以及 Enterprise 10.8.1 或更高版本。
GLOBAL_EXTRA_HIGH—精度约为 1 厘米,将在全球范围内保持一致。
GLOBAL_HIGH—精度约为 0.5 米,将在全球范围内保持一致。 这是默认设置。
LOCAL_EXTRA_HIGH—提高了用于局部区域的精度。
|
String
|
|
version_compatibility
(可选)
|
指定将创建的定位器的版本。 指定版本可实现将定位器与之前版本的 ArcGIS 配合使用,并支持向后兼容。
CURRENT_VERSION—定位器与当前 ArcGIS Pro 版本兼容。 它将与可作为参数选项的较早版本不兼容。 例如,如果选择 CURRENT_VERSION 并且另一个选项为 V3_0_TO_3_3,则创建的定位器仅在 3.4 和更高版本的 ArcGIS Pro 以及 11.4 和更高版本的 Enterprise 中受支持。
V3_0_TO_3_3—该定位器将与 ArcGIS Pro 的 3.0 至 3.3 版本兼容。
|
String
|
代码示例
以下 Python 脚本演示了如何在独立脚本中使用 CreateLocator 函数:。
# Description: Create a POI locator using a feature class in a file geodatabase
# that contains points of interest for Arts & Entertainment
# locations as reference data, where country_code and language_code
# are defined in the data. The new locator will be created in a
# file folder.
# Import system modules
import arcpy
# Set workspace
arcpy.env.workspace = "C:/Data/RhodeIsland"
# Set local variables:
primary_reference_data = "RI_Arts_POI POI"
field_mapping = ["POI.PLACE_NAME 'RI_Arts_POI'.PLACE_NAME",\
"POI.CATEGORY 'RI_Arts_POI'.CATEGORY",\
"POI.SUBCATEGORY 'RI_Arts_POI'.SUBCATEGORY",\
"POI.HOUSE_NUMBER 'RI_Arts_POI'.HOUSE_NUMB",\
"POI.STREET_NAME 'RI_Arts_POI'.STREET_NAME",\
"POI.NEIGHBORHOOD 'RI_Arts_POI'.NEIGHBORHOOD",\
"POI.CITY 'RI_Arts_POI'.CITY_NAME",\
"POI.SUBREGION 'RI_Arts_POI'.SUBREGION",\
"POI.REGION 'RI_Arts_POI'.REGION_NAME",\
"POI.POSTAL 'RI_Arts_POI'.POSTAL_CODE",\
"POI.COUNTRY_CODE 'RI_Arts_POI'.COUNTRY_CODE",\
"POI.LANG_CODE 'RI_Arts_POI'.LANGUAGE_CODE",\
"POI.RANK 'RI_Arts_POI'.RANK"]
out_locator = "Arts_Entertainment_POIs"
# Run CreateLocator
arcpy.geocoding.CreateLocator("AS_DEFINED_IN_DATA", primary_reference_data, field_mapping,
out_locator, "AS_DEFINED_IN_DATA")
以下 Python 脚本演示了如何在独立脚本中使用 CreateLocator 函数。
# Description: Create a POI locator using a shapefile that contains points
# of interest for airport locations as reference data. The new
# locator will be created in a file folder.
# Import system modules
import arcpy
# Set local variables:
country_code="USA"
primary_reference_data=r"C:\Data\airports.shp POI"
field_mapping=["POI.PLACE_NAME 'airports.shp'.name",\
"POI.CATEGORY 'airports.shp'.type",\
"POI.REGION 'airports.shp'.iso_region",\
"POI.ZONE 'airports.shp'.iso_country"]
out_locator=r"C:\Data\Airports_Locator"
language_code="ENG"
# Run CreateLocator
arcpy.geocoding.CreateLocator(country_code, primary_reference_data, field_mapping,
out_locator, language_code)
CreateLocator 示例 3(Python 窗口)
以下 Python 脚本演示了如何在即时模式下使用 CreateLocator 函数。
# Description: Create a StreetAddress locator using a street centerline feature
# class in a file geodatabase as reference data, where multiple
# custom_output_fields are added to the locator for use in the
# geocode result. country_code and language_code are specified and
# will be applied to the entire reference dataset. The new locator
# will be created in a file folder.
# Import system modules
import arcpy
# Set workspace
arcpy.env.workspace = "C:/Data/Denver"
# Set local variables
country_code = "USA"
primary_reference_data = "Street_Centerline StreetAddress"
field_mapping = ["StreetAddress.HOUSE_NUMBER_FROM_LEFT 'Street_Centerline'.L_F_ADD",\
"StreetAddress.HOUSE_NUMBER_TO_LEFT 'Street_Centerline'.L_T_ADD",\
"StreetAddress.HOUSE_NUMBER_FROM_RIGHT 'Street_Centerline'.R_F_ADD",\
"StreetAddress.HOUSE_NUMBER_TO_RIGHT 'Street_Centerline'.R_T_ADD",\
"StreetAddress.STREET_PREFIX_DIR 'Street_Centerline'.PREFIX",\
"StreetAddress.STREET_PREFIX_TYPE 'Street_Centerline'.TYPE",\
"StreetAddress.STREET_NAME 'Street_Centerline'.NAME",\
"StreetAddress.STREET_SUFFIX_TYPE 'Street_Centerline'.TYPE",\
"StreetAddress.STREET_SUFFIX_DIR 'Street_Centerline'.SUFFIX",\
"StreetAddress.POSTAL_LEFT 'Street_Centerline'.ZIPLEFT",\
"StreetAddress.POSTAL_RIGHT 'Street_Centerline'.ZIPRIGHT",\
"StreetAddress.CustomField1_left 'Street_Centerline'.LEFTFIRE",\
"StreetAddress.CustomField1_right 'Street_Centerline'.RTFIRE",\
"StreetAddress.CustomField2_left 'Street_Centerline'.LEFTEMS",\
"StreetAddress.CustomField2_right 'Street_Centerline'.RTEMS"]
out_locator = "DenverStreetsCustomFieldsLocator"
language_code = "ENG"
# Run CreateLocator
arcpy.geocoding.CreateLocator(country_code, primary_reference_data, field_mapping,
language_code, None, None, "CustomField1;CustomField2")
CreateLocator 示例 4(Python 窗口)
以下 Python 脚本演示了如何在即时模式下使用 CreateLocator 函数。
# Create a StreetAddress locator using a street centerline feature class and an alternate
# name table, for alternate street names, in a file geodatabase as reference data.
# The new locator will be created in a file folder.
# Import system modules
import arcpy
# Set workspace
arcpy.env.workspace = "C:/ArcTutor/Geocoding/Atlanta"
# Set local variables
primary_reference_data = "streets StreetAddress"
field_mapping = ["StreetAddress.STREET_NAME_JOIN_ID 'streets'.STREETID",\
"StreetAddress.HOUSE_NUMBER_FROM_LEFT 'streets'.L_F_ADD",\
"StreetAddress.HOUSE_NUMBER_TO_LEFT 'streets'.L_T_ADD",\
"StreetAddress.HOUSE_NUMBER_FROM_RIGHT 'streets'.R_F_ADD",\
"StreetAddress.HOUSE_NUMBER_TO_RIGHT 'streets'.R_T_ADD",\
"StreetAddress.STREET_PREFIX_DIR 'streets'.PREFIX",\
"StreetAddress.STREET_PREFIX_TYPE 'streets'.PRE_TYPE",\
"StreetAddress.STREET_NAME 'streets'.NAME",\
"StreetAddress.STREET_SUFFIX_TYPE 'streets'.TYPE",\
"StreetAddress.STREET_SUFFIX_DIR 'streets'.SUFFIX",\
"StreetAddress.CITY_LEFT 'streets'.CITYL",\
"StreetAddress.CITY_RIGHT 'streets'.CITYR",\
"StreetAddress.REGION_LEFT 'streets'.STATE_ABBR",\
"StreetAddress.REGION_RIGHT 'streets'.STATE_ABBR",\
"StreetAddress.POSTAL_LEFT 'streets'.ZIPL",\
"StreetAddress.POSTAL_RIGHT 'streets'.ZIPR"]
alternatename_tables = "altname AlternateStreetName"
alternate_field_mapping = ["AlternateStreetName.STREET_NAME_JOIN_ID 'altname'.STREETID",\
"AlternateStreetName.STREET_PREFIX_DIR 'altname'.PRE_DIR",\
"AlternateStreetName.STREET_PREFIX_TYPE 'altname'.PRE_TYPE",\
"AlternateStreetName.STREET_NAME 'altname'.ST_NAME",\
"AlternateStreetName.STREET_SUFFIX_TYPE 'altname'.ST_TYPE",\
"AlternateStreetName.STREET_SUFFIX_DIR 'altname'.SUF_DIR",\
"AlternateStreetName.PRIMARY_NAME_INDICATOR 'altname'.PRIMARY"]
out_locator = "AtlantaAlternateStreetsLocator"
# Run CreateLocator
arcpy.geocoding.CreateLocator("USA", primary_reference_data, field_mapping,
out_locator, "ENG", alternatename_tables,
alternate_field_mapping)
以下 Python 脚本演示了如何在即时模式下使用 CreateLocator 函数。
# Description: Create a multirole locator (PointAddress & StreetAddress) using a hosted
# feature service from ArcGIS Online as reference data.
# country_code and language_code
# are specified and will be applied to the entire reference dataset.
# The new locator will be created in a file folder.
# Import system modules
import arcpy
# Sign in to ArcGIS Online to use feature services as input
arcpy.SignInToPortal("https://www.arcgis.com", "<username>", "<password>")
# Set local variables
country = "USA"
in_table = "https://services.arcgis.com/<layer_id>/arcgis/rest/services/<service_name>/FeatureServer/<layer_number> PointAddress;"\
"https://services.arcgis.com/<layer_id>/arcgis/rest/services/<service_name>/FeatureServer/<layer_number> StreetAddress"
field_mapping = ["PointAddress.ADDRESS_JOIN_ID '0'.PT_ADDR_ID",\
"PointAddress.HOUSE_NUMBER '0'.ADDRESS",\
"PointAddress.STREET_NAME '0'.ST_NAME",\
"PointAddress.SIDE '0'.SIDE",\
"PointAddress.CITY '0'.CITY",\
"PointAddress.REGION '0'.STATE",\
"StreetAddress.HOUSE_NUMBER_FROM_LEFT '1'.L_F_ADD_INT",\
"StreetAddress.HOUSE_NUMBER_TO_LEFT '1'.L_T_ADD_INT",\
"StreetAddress.HOUSE_NUMBER_FROM_RIGHT '1'.R_F_ADD_INT",\
"StreetAddress.HOUSE_NUMBER_TO_RIGHT '1'.R_T_ADD_INT",\
"StreetAddress.STREET_PREFIX_DIR '1'.PREFIX",\
"StreetAddress.STREET_PREFIX_TYPE '1'.PRETYPE",\
"StreetAddress.STREET_NAME '1'.NAME",\
"StreetAddress.STREET_SUFFIX_TYPE '1'.TYPE",\
"StreetAddress.STREET_SUFFIX_DIR '1'.SUFFIX",\
"StreetAddress.CITY_LEFT '1'.PLACENAME_L",\
"StreetAddress.CITY_RIGHT '1'.PLACENAME_R",\
"StreetAddress.REGION_LEFT '1'.STATE",\
"StreetAddress.REGION_ABBR_LEFT '1'.STATE_L",\
"StreetAddress.REGION_RIGHT '1'.STATE",\
"StreetAddress.REGION_ABBR_RIGHT '1'.STATE_R"]
out_locator = r"C:\output\locators\MultiroleFeatureServiceBasedLocator"
language = "ENG"
# Run CreateLocator
arcpy.geocoding.CreateLocator(country, in_table, field_mapping, out_locator, language)