创建定位器 (地理编码)

描述

创建定位器,以供查找地址或地点位置,将地址或地点表转换为点要素集合,或标识点位置的地址。

注:

通过此工具创建的定位器适用于 ArcGIS Pro 2.2 或更高版本、Enterprise 10.6.1 或更高版本以及作为 ArcMap 中的定位器服务。在 Enterprise 10.7 之前的版本中,不一定支持所有定位器功能。当向最新版本的软件中添加附加功能时,上述情况适用。通过此工具创建的定位器不能用作 ArcMap 中的本地定位器。

使用方法

  • 定位器角色可用于定义当前正在使用的数据类型(宗地、街道中心线、邮政、感兴趣点等)并提供构建定位器时所使用的相应字段以及地理编码结果中所返回的信息。随 ArcGIS Pro 提供的主定位器角色允许您构建以下常见类型的定位器:

    • PointAddress - 街道地址(基于代表房屋和建筑位置的点)。其中包括 Subaddress(基于代表房屋和建筑子地址位置的点,例如套房,楼层或公寓)。
    • Parcel - 基于点或面的地址或宗地名称,表示被视为不动产且可能包括一个或多个房屋或其他建筑物的一片土地,通常会为其分配一个地址和宗地标识号,例如 17 011100120063。
    • StreetAddress - 街道地址(基于门牌号由数字范围内插的街道)。其中包括十字路口、街道名称和街道扩建。
    • Point of Interest - 包括行政区域、地名、企业、地标和地理要素 - 例如星巴克。
    • DistanceMarker - 用于表示沿某条街道的线性距离的街道地址(通常以公里或英里为单位,且指定了原点位置)。
    • DistanceRange - 该距离标记类型表示沿某街道中心线基于线要素的内插距离值。
    • Postal - 邮政编码、带扩展数字的邮政编码以及应使用多边形参考数据返回最佳反向地理编码结果的邮政地点。
    • Localities - 行政区域或地区,如城市、社区、州等,其中多边形参考数据应用于返回最佳反向地理编码结果。

  • 可以使用创建定位器工具创建多角色定位器。多角色定位器允许您将多个参考数据图层和角色组合成一个定位器,以便一次搜索多种类型的位置。

    了解有关将多个角色组合成一个定位器的详细信息

  • 表示为服务的要素类和表作为数据类型,支持用作主要参考数据和备用名称表。

  • 备用名称表可用于所有受支持的定位器角色,并且支持主要参考数据中的备用要素名称。

    了解有关备用名称表的详细信息

  • 可将此工具的输出用作创建复合地址定位器工具的输入。

语法

arcpy.geocoding.CreateLocator(country_code, primary_reference_data, field_mapping, out_locator, language_code, {alternatename_tables}, {alternate_field_mapping}, {custom_output_fields}, {precision_type})
参数说明数据类型
country_code

指定将于何处将特定于国家/地区的地理编码逻辑应用于定位器的参考数据。

可通过 AS_DEFINED_IN_DATA 对其进行指定,并且可从 field_mapping 中的 primary_reference_data 内映射某一值,或通过指定三个字符的国家/地区代码名称,例如 USACANPRI,将其应用于整个数据集。

它提供了一个国家/地区模板,该模板中包含了可供 field_mapping 参数使用的预期字段名称以便为定位器创建指定的国家/地区。

  • AS_DEFINED_IN_DATA在每个要素的参考数据中定义的三位字符国家/地区代码值
  • ASM美属萨摩亚
  • AUS澳洲
  • AUT奥地利
  • BEL比利时
  • CAN加拿大
  • CHE 瑞士
  • DEU德国
  • ESP西班牙
  • FRA法国
  • GBR大不列颠
  • GUM关岛
  • MNP北马里亚纳群岛
  • NLD荷兰
  • PRI波多黎各
  • VIR美属 维京群岛
  • USA美国
  • UMI 美属边疆群岛
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 参数中每个表的相关字段。如果不想将定位器角色所使用的可选参考数据字段映射到参考数据集中的字段,则无需使用 <None> 来代替字段名,以此指定不存在任何映射。

要确定定位器角色所使用的参考数据字段的 <locator role field name>,请在 ArcGIS Pro 中打开创建定位器工具并选择相应的定位器角色。出现在字段映射参数的字段名称列中的名称就是字段角色的字段名称。

注:

如果正在使用的是备用名称表,请映射 primary_reference_data 中的连接 ID。

要添加自定义输出字段,则必须在 custom_output_fieldsfield_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 并从 primary_reference_data 中的 field_mapping 内映射某一值来对其进行指定,或通过使用表示地址语言的三位字符语言代码(如 ENG)来指定某一语言,从而将其应用于整个数据集。

  • AS_DEFINED_IN_DATA在每个要素的参考数据中定义的三位字符国家/地区代码值
  • BAQ巴斯克语
  • CAT加泰罗尼亚语
  • DUT 荷兰语
  • ENG英文
  • FRE法语
  • GER德语
  • GLG加利西亚语
  • ITA 意大利语
  • SPA西班牙语
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_tablesalternate_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'"
注:

如果数据已归一化且主表不包含城市名称值(但备用名称表中包含),则可将 Primary Name Indicator 字段映射至备用名称表中的字段,该字段包含一个值,该值指示了记录是否为主字段(例如,true/false 或 Yes/No)。如果未映射此字段,则备用名称表中的第一条记录将被用作主值。

String
custom_output_fields
[custom_output_fields,...]
(可选)

将输出字段添加至地理编码结果。针对此参数指定的值将定义由地理编码结果返回的输出字段的名称;但必须将各个新字段映射至参考数据中的字段。这个新输出字段将应用于定位器中所使用的全部角色。如果定位器角色具有左侧和右侧之分,则字段名称的末尾将附加 _left 和 _right。

注:

您必须首先将自定义输出字段名称纳入 field_mapping 参数;然后在 custom_output_fields 参数中列出这些名称。

String
precision_type
(可选)

指定定位器的精度。

注:

使用 GLOBAL_EXTRA_HIGHLOCAL_EXTRA_HIGH 精度创建的定位器可用于 ArcGIS Pro 2.6 或更高版本、Enterprise 10.8.1 或更高版本。

  • GLOBAL_EXTRA_HIGH精度约为 1 厘米,在全球范围内保持一致。
  • GLOBAL_HIGH 精度约为 0.5 米,在全球范围内保持一致。这是默认设置。
  • LOCAL_EXTRA_HIGH提高了局部区域的精度。
String

代码示例

CreateLocator 示例 1(独立脚本)

以下 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"
# Execute CreateLocator
arcpy.geocoding.CreateLocator("AS_DEFINED_IN_DATA", primary_reference_data, field_mapping, 
                              out_locator, "AS_DEFINED_IN_DATA")
CreateLocator 示例 2(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"
# Execute CreateLocator
arcpy.geocoding.CreateLocator(country_code, primary_reference_data, field_mapping, 
                              language_code, None, None, "CustomField1;CustomField2")
CreateLocator 示例 3(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"
# Execute CreateLocator arcpy.geocoding.CreateLocator("USA", primary_reference_data, field_mapping,                               out_locator, "ENG", alternatename_tables, 
                              alternate_field_mapping)
CreateLocator 示例 4(独立脚本)

以下 Python 脚本演示了如何在即时模式下使用 CreateLocator 函数。

# Description: Create a multi-role 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"
# Execute CreateLocator arcpy.geocoding.CreateLocator(country, in_table, field_mapping, out_locator, language)

环境

此工具不使用任何地理处理环境。

许可信息

  • Basic: 是
  • Standard: 是
  • Advanced: 是

相关主题