按位置选择图层 (数据管理)

摘要

根据与另一个数据集或同一数据集中要素的空间关系来选择要素。

输入要素参数中的每个要素将根据选择要素参数中的要素进行评估。 如果满足指定的关系参数值,则选择输入要素。

了解有关“按位置选择”的详细信息,其中包括关系的图像示例

使用情况

  • 如果输入为要素类或数据集路径,则此工具将创建并返回应用了该工具结果的新图层。

  • 用来评估空间关系的坐标系可能会对结果产生影响。 在一个坐标系中相交的要素在另一个坐标系中可能不相交。

    • 此工具可在输入要素数据源的坐标系中评估空间关系。 将输出坐标系环境设置为当前地图 [图层] 可使用与当前显示区域相同的坐标系。

  • 要根据要素与同一图层中其他要素的空间关系来选择要素,请参阅根据图层内的空间关系选择中的示例。

  • 所选记录的数量将地理处理历史中列出。 单击参数 > 计数以进行访问。 此外,获取计数工具也可以用于计算所选记录的数量。 在 Python 中,也可以通过工具的 Result 对象访问所选记录的数量。

  • 当应用选择时,可以应用零记录选择。 例如,当任何要素均不相交时,可以使用关系参数的相交选项,由此选择零条记录。 使用该图层作为输入的地理处理工具将不使用输入中的任何记录。

  • 有关使用 3D 空间关系选项 3D 相交在某一 3D 距离范围内的详细信息,请参阅按 3D 位置关系选择

  • 对于 Relationship 参数,在使用企业级地理数据库数据时,相交 (DBMS) 选项可能会提供比相交选项更好的性能;但是,此选项仅在特定条件下受支持。 如果满足所有条件,则空间操作将在企业级地理数据库管理系统 (DBMS) 中而非客户端上执行。 使用此空间关系选项时应考虑以下问题:

    • 要在 DBMS 中运行该操作,必须满足以下要求:
      • 输入要素选择要素参数值必须来自同一企业级地理数据库工作空间,并且具有相同的空间参考和几何存储类型
      • 连接到地理数据库的用户必须具有在存储要素类的数据库中创建视图的权限。
      • 此选项支持的几何存储类型为 ST_Geometry(IBM Db2OraclePostgreSQLSAP HANA)、PostGIS (PostgreSQL)、SDO_GEOMETRY (Oracle),以及 Geometry 和 Geography (Microsoft SQL Server)。 有关安装和配置 DBMS 的信息,以及有关配置所选几何存储类型以使其可供使用的信息,请参阅地理数据库管理。 请参阅特定于您的 DBMS 的供应商文档,以确定每种几何存储类型的期望内容。 在运行空间操作时,可能会有一些存储限制会影响性能和可扩展性。
      • 如果 Oracle 中的要素类使用 ST_Geometry 来存储空间数据,则必须配置 Oracle extproc 来访问 ST_Geometry。 有关详细信息,请参阅Oracle 中配置 extproc 以访问 ST_Geometry
      • 未设置搜索距离参数。
      • 选择类型参数值为新建选择
      • 运行该工具之前的现有选择是使用图层定义查询而非选择集进行的。
    • 在处理过程中无需应用 x,y 容差即可执行空间运算。 DBMS 不支持使用 x,y 容差。 与在应用 x,y 容差的客户端上执行分析时相比,这可能会导致返回的选择稍有不同。 有关如何在客户端操作期间应用 x,y 容差的详细信息,请参阅要素类基础知识

参数

标注说明数据类型
输入要素

将根据选择要素参数值进行评估的要素。 选择将应用于这些要素。

Feature Layer; Raster Layer; Mosaic Layer
关系
(可选)

指定要评估的空间关系。

  • 相交如果输入图层中的要素与某一选择要素相交,则会选择这些要素。 这是默认设置。
  • 3D 相交如果输入要素中的要素与三维空间(x、y 和 z)中的某一选择要素相交,则将选择这些要素。
  • 相交 (DBMS)如果输入图层中的要素与某一选择要素相交,则会选择这些要素。此选项仅适用于企业级地理数据库。 当满足所有要求时,选择将在企业级地理数据库 DBMS 中,而不是在客户端上进行处理(请参阅使用说明)。与在客户端上执行选择相比,此选项可提供更好的性能。
  • 在某一距离范围内如果输入图层中的要素在某一选择要素的指定距离内(使用欧氏距离),则将选择这些要素。 使用搜索距离参数指定距离。
  • 在某一测地线距离范围内此空间关系与在某一距离范围内相同,不同之处在于采用测地线距离而非平面距离。 将使用测地线公式计算要素间的距离,这种方法考虑到椭球体的曲率,并可以正确处理跨越日期变更线和两极及其附近的数据。 如果数据涵盖较大地理范围或输入的坐标系不适合进行距离计算,请选择此选项。 使用搜索距离参数指定距离。
  • 在某一 3D 距离范围内如果输入图层中的要素在三维空间中的某一选择要素的指定距离内,则会选择这些要素。 使用搜索距离参数指定距离。
  • 包含如果输入图层中的要素包含选择要素,则将选择这些要素。
  • 完全包含如果输入图层中的要素完全包含选择要素,则将选择这些要素。
  • Clementini 包含该空间关系产生的结果与包含选项结果相同,但有一种情况例外:如果选择要素完全位于输入要素的边界上(没有任何一部分完全位于内部或外部),则将不会选择任何要素。Clementini 将边界面定义为用来分隔内部和外部的线,将线的边界定义为其端点,点的边界始终为空。
  • 位于如果输入图层中的要素在选择要素中,则将选择这些要素。
  • 完全位于如果输入图层中的要素完全在选择要素之内或由选择要素包含,则将选择这些要素。
  • Clementini 位于其结果将与位于选项结果相同,但有一种情况例外:如果输入图层中的要素完全位于选择图层中的要素边界上,则将不会选择该要素。Clementini 将边界面定义为用来分隔内部和外部的线,将线的边界定义为其端点,点的边界始终为空。
  • 与其他要素相同如果输入图层中的要素与选择要素相同(在几何中),则将选择这些要素。
  • 边界接触如果输入图层中要素的边界与某一选择要素接触,则会选择这些要素。 如果输入要素为线或面,则输入要素的边界只能接触选择要素的边界,且输入要素的任何部分均不可跨越选择要素的边界。
  • 与其他要素共线如果输入图层中的要素与某一选择要素共线,则会选择这些要素。 输入要素和选择要素必须是线或面。
  • 与轮廓交叉如果输入图层中的要素与某一选择要素的轮廓交叉,则会选择这些要素。 输入和选择要素必须是线或面。 如果将面用于输入或选择图层,则会使用面的边界(线)。 将选择在某一点交叉的线,而不会选择共线的线。
  • 中心在要素范围内如果输入图层中要素的中心落在某一选择要素内,则会选择这些要素。 要素中心的计算方式如下:对于面和多点,将使用几何的质心;对于线输入,则会使用几何的中点。
String
选择要素
(可选)

输入要素参数中的要素将根据它们与此图层或要素类中要素的关系进行选择。

Feature Layer
搜索距离
(可选)

将被搜索的距离。 仅当关系参数设置为在某一距离范围内在某一测地线距离范围内在某一 3D 距离范围内相交3D 相交中心在要素范围内或者包含时,该参数才有效。

如果选择在某一测地线距离范围内选项,请使用线性单位(如千米或英里)。

Linear Unit
选择内容类型
(可选)

指定如何将选择内容应用于输入,以及如何同现有选择内容进行组合。 该工具不包括清除现有选择的选项;使用按属性选择图层工具并将选择类型参数设置为清除当前选择来执行此操作。

  • 新建选择内容生成的选择内容将替换任何现有选择内容。 这是默认设置。
  • 添加到当前选择内容将生成的选择内容添加至现有选择内容。 如果不存在选择内容,该选项的作用与新选择内容选项的作用相同。
  • 从当前选择内容中移除将生成的选择内容从现有选择内容中移除。 如果不存在选择内容,此操作将不起作用。
  • 选择当前选择内容的子集将生成的选择内容与现有选择内容进行组合。 仅两者共有的记录将保持选中状态。
  • 切换当前选择内容选择内容将被切换。 将所选的所有记录从选择内容中移除,将未选取的所有记录添加到当前选择内容中。如果指定此选项,则将忽略选择要素参数和关系参数。
String
反向空间关系
(可选)

指定将使用空间关系评估结果,还是使用反转结果。 例如,可使用此参数获取不相交或与另一数据集中的要素不在指定距离范围内的要素的列表。

  • 未选中 - 将使用评估结果。 这是默认设置。
  • 选中 - 将使用反转评估结果。 如果使用选择类型参数,则将先反转选择,然后再将其与现有选择组合。
Boolean

派生输出

标注说明数据类型
带有所选内容的图层

已应用选择的第一个输入。

Feature Layer; Mosaic Layer
输出图层名称

一个多值参数,其中包括应用了选择的所有输入。

在模型中使用此输出参数可连接到具有多值输入的工具,例如合并工具。

Feature Layer; Mosaic Layer
计数

所选记录的数量。

如果存在多个输入要素参数值,则计数将与输入的顺序相同。

Long

arcpy.management.SelectLayerByLocation(in_layer, {overlap_type}, {select_features}, {search_distance}, {selection_type}, {invert_spatial_relationship})
名称说明数据类型
in_layer
[in_layer,...]

将使用 select_features 参数值评估的要素。 选择将应用于这些要素。

Feature Layer; Raster Layer; Mosaic Layer
overlap_type
(可选)

指定要评估的空间关系。

  • INTERSECT如果输入图层中的要素与某一选择要素相交,则会选择这些要素。 这是默认设置。
  • INTERSECT_3D如果输入要素中的要素与三维空间(x、y 和 z)中的某一选择要素相交,则将选择这些要素。
  • INTERSECT_DBMS如果输入图层中的要素与某一选择要素相交,则会选择这些要素。此选项仅适用于企业级地理数据库。 当满足所有要求时,选择将在企业级地理数据库 DBMS 中,而不是在客户端上进行处理(请参阅使用说明)。与在客户端上执行选择相比,此选项可提供更好的性能。
  • WITHIN_A_DISTANCE如果输入图层中的要素在某一选择要素的指定距离内(使用欧氏距离),则将选择这些要素。 使用 search_distance 参数指定距离。
  • WITHIN_A_DISTANCE_3D如果输入图层中的要素在三维空间中的某一选择要素的指定距离内,则会选择这些要素。 使用 search_distance 参数指定距离。
  • WITHIN_A_DISTANCE_GEODESIC此空间关系与 WITHIN_A_DISTANCE 相同,不同之处在于采用测地线距离而非平面距离。 将使用测地线公式计算要素间的距离,这种方法考虑到椭球体的曲率,并可以正确处理跨越日期变更线和两极及其附近的数据。 如果数据涵盖较大地理范围或输入的坐标系不适合进行距离计算,请选择此选项。 使用 search_distance 参数指定距离。
  • CONTAINS如果输入图层中的要素包含选择要素,则将选择这些要素。
  • COMPLETELY_CONTAINS如果输入图层中的要素完全包含选择要素,则将选择这些要素。
  • CONTAINS_CLEMENTINI该空间关系产生的结果与 CONTAINS 选项结果相同,但有一种情况例外:如果选择要素完全位于输入要素的边界上(没有任何一部分完全位于内部或外部),则将不会选择任何要素。Clementini 将边界面定义为用来分隔内部和外部的线,将线的边界定义为其端点,点的边界始终为空。
  • WITHIN如果输入图层中的要素在选择要素中,则将选择这些要素。
  • COMPLETELY_WITHIN如果输入图层中的要素完全在选择要素之内或由选择要素包含,则将选择这些要素。
  • WITHIN_CLEMENTINI其结果将与 WITHIN 选项结果相同,但有一种情况例外:如果输入图层中的要素完全位于选择图层中的要素边界上,则将不会选择该要素。Clementini 将边界面定义为用来分隔内部和外部的线,将线的边界定义为其端点,点的边界始终为空。
  • ARE_IDENTICAL_TO如果输入图层中的要素与选择要素相同(在几何中),则将选择这些要素。
  • BOUNDARY_TOUCHES如果输入图层中要素的边界与某一选择要素接触,则会选择这些要素。 如果输入要素为线或面,则输入要素的边界只能接触选择要素的边界,且输入要素的任何部分均不可跨越选择要素的边界。
  • SHARE_A_LINE_SEGMENT_WITH如果输入图层中的要素与某一选择要素共线,则会选择这些要素。 输入要素和选择要素必须是线或面。
  • CROSSED_BY_THE_OUTLINE_OF如果输入图层中的要素与某一选择要素的轮廓交叉,则会选择这些要素。 输入和选择要素必须是线或面。 如果将面用于输入或选择图层,则会使用面的边界(线)。 将选择在某一点交叉的线,而不会选择共线的线。
  • HAVE_THEIR_CENTER_IN如果输入图层中要素的中心落在某一选择要素内,则会选择这些要素。 要素中心的计算方式如下:对于面和多点,将使用几何的质心;对于线输入,则会使用几何的中点。
String
select_features
(可选)

输入要素参数中的要素将根据它们与此图层或要素类中要素的关系进行选择。

Feature Layer
search_distance
(可选)

将被搜索的距离。 仅当 overlap_type 参数设置为以下选项时,该参数才有效:WITHIN_A_DISTANCEWITHIN_A_DISTANCE_GEODESICWITHIN_A_DISTANCE_3DINTERSECTINTERSECT_3DHAVE_THEIR_CENTER_INCONTAINS

如果选择 WITHIN_A_DISTANCE_GEODESIC 选项,请使用线性单位,例如千米或英里。

Linear Unit
selection_type
(可选)

指定如何将选择内容应用于输入,以及如何同现有选择内容进行组合。 该工具不包括清除现有选择的选项;使用按属性选择图层工具并将 selection_type 参数设置为 CLEAR_SELECTION 来执行此操作。

  • NEW_SELECTION生成的选择内容将替换任何现有选择内容。 这是默认设置。
  • ADD_TO_SELECTION将生成的选择内容添加至现有选择内容。 如果不存在选择内容,该选项的作用同 NEW_SELECTION 选项。
  • REMOVE_FROM_SELECTION将生成的选择内容从现有选择内容中移除。 如果不存在选择内容,此操作将不起作用。
  • SUBSET_SELECTION将生成的选择内容与现有选择内容进行组合。 仅两者共有的记录将保持选中状态。
  • SWITCH_SELECTION选择内容将被切换。 将所选的所有记录从选择内容中移除,将未选取的所有记录添加到当前选择内容中。如果指定此选项,则将忽略 select_features 参数和 overlap_type 参数。
String
invert_spatial_relationship
(可选)

指定将使用空间关系评估结果,还是使用反转结果。 例如,可使用此参数获取不相交或与另一数据集中的要素不在指定距离范围内的要素的列表。

  • NOT_INVERT将使用评估结果。 这是默认设置。
  • INVERT将使用反转评估结果。 如果使用 selection_type 参数,则将先反转选择,然后再将其与现有选择组合。
Boolean

派生输出

名称说明数据类型
out_layer_or_view

已应用选择的第一个输入。

Feature Layer; Mosaic Layer
out_layers_or_views

一个多值参数,其中包括应用了选择的所有输入。

在模型中使用此输出参数可连接到具有多值输入的工具,例如合并工具。

Feature Layer; Mosaic Layer
count

所选记录的数量。

如果存在多个 in_features 参数值,则计数将与输入的顺序相同。

Long

代码示例

SelectLayerByLocation 示例 1(Python 窗口)

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

import arcpy
arcpy.management.SelectLayerByLocation("parcel_lyr", "have_their_center_in", 
                                       "c:/kamsack.gdb/city_limits")
SelectLayerByLocation 示例 2(独立脚本)

以下独立脚本显示了如何在工作流中使用 SelectLayerByLocation 函数,以便根据位置和属性查询提取要素并将其导入一个新要素类中。

# Description: Extract features to a new feature class based on a 
#              location and an attribute query

# Import arcpy and set path to data
import arcpy
arcpy.env.workspace = "c:/data/mexico.gdb"

# Make a layer and select cities that overlap the chihuahua polygon
chihuahua_cities = arcpy.management.SelectLayerByLocation('cities', 'INTERSECT', 
                                                          'chihuahua')

# From the previous selection, select a subset of cities that have 
# population > 10,000
arcpy.management.SelectLayerByAttribute(chihuahua_cities, 
                                        'SUBSET_SELECTION', 
                                        '"population" > 10000')

# If features matched criteria, write them to a new feature class
matchcount = int(arcpy.management.GetCount(chihuahua_cities)[0]) 

if matchcount == 0:
    print('no features matched spatial and attribute criteria')
else:
    arcpy.management.CopyFeatures(chihuahua_cities, 'chihuahua_10000plus')
    print('{0} cities that matched criteria written to {0}'.format(
        matchcount, chihuahua_10000plus))
SelectLayerByLocation 示例 3(独立脚本)

以下独立脚本显示了 overlap_type 参数的 WITHIN_A_DISTANCEWITHIN_A_DISTANCE_GEODESIC 选项与 search_distance 参数搭配使用时的多种用法。

# Description: Select features within a distance

# Import arcpy and set path to data
import arcpy

arcpy.env.workspace = r"c:\data\mexico.gdb"

arcpy.management.SelectLayerByLocation('cities', 'WITHIN_A_DISTANCE', 
                                       'chihuahua', '1.5 Miles')
arcpy.management.SelectLayerByLocation('cities', 'WITHIN_A_DISTANCE_GEODESIC', 
                                       'chihuahua', '200 Kilometers')

# When using WITHIN_A_DISTANCE, if distance units are not specified, the 
# distance value is assumed to be in the units of the input dataset's coordinate 
# system
arcpy.management.SelectLayerByLocation('cities', 'WITHIN_A_DISTANCE', 
                                       'chihuahua', '200')

# When using WITHIN_A_DISTANCE_GEODESIC, if distance units are not specified, 
# the distance value is assumed to be in meters
arcpy.management.SelectLayerByLocation('cities', 'WITHIN_A_DISTANCE_GEODESIC', 
                                       'chihuahua', '200')