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

描述

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

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

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

使用方法

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

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

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

  • 可使用该工具根据要素与同一图层中其他要素的空间关系来选择要素。有关示例,请参阅在图层内基于空间关系进行选择

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

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

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

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

语法

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如果输入图层中的要素在某一选择要素的指定距离内,则会选择这些要素。将使用测地线公式计算要素间的距离,这种方法考虑到椭球体的曲率,并可以正确处理跨越日期变更线和两极及其附近的数据。使用 search_distance 参数指定距离。
  • CONTAINS如果输入图层中的要素包含某一选择要素,则会选择这些要素。
  • COMPLETELY_CONTAINS如果输入图层中的要素完全包含某一选择要素,则会选择这些要素。
  • CONTAINS_CLEMENTINI该空间关系产生的结果同 COMPLETELY_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
(可选)

指定如何将选择内容应用于输入,以及如何同现有选择内容进行组合。该工具不包含清除现有选择内容的选项;请使用按属性选择图层工具上的 CLEAR_SELECTION 选项。

  • NEW_SELECTION生成的选择内容将替换任何现有选择内容。这是默认设置。
  • ADD_TO_SELECTION将生成的选择内容添加至现有选择内容。如果不存在选择内容,该选项的作用同 NEW_SELECTION 选项。
  • REMOVE_FROM_SELECTION将生成的选择内容从现有选择内容中移除。如果不存在选择内容,该操作将不起作用。
  • SUBSET_SELECTION将生成的选择内容与现有选择内容进行组合。只有两者共同的记录才会被选取。
  • SWITCH_SELECTION选择内容将被切换。将所选的所有记录从选择内容中移除,将未选取的所有记录添加到选择内容中。选择该选项时,将忽略 select_featuresoverlap_type 参数。
String
invert_spatial_relationship
(可选)

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

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

派生输出

名称说明数据类型
out_layer_or_view

已应用选择的已更新输入。

要素图层;镶嵌图层
out_layers_or_views

已更新输入的名称。

要素图层;镶嵌图层
count

所选记录的数量。

长整型

代码示例

SelectLayerByLocation 示例 1(Python 窗口)

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

import arcpy
arcpy.SelectLayerByLocation_management("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.SelectLayerByLocation_management('cities', 'INTERSECT', 
                                                          'chihuahua')
# From the previous selection, select a subset of cities that have 
# population > 10,000
arcpy.SelectLayerByAttribute_management(chihuahua_cities, 
                                        'SUBSET_SELECTION', 
                                        '"population" > 10000')
# If features matched criteria, write them to a new feature class
matchcount = int(arcpy.GetCount_management(chihuahua_cities)[0]) 
if matchcount == 0:
    print('no features matched spatial and attribute criteria')
else:
    arcpy.CopyFeatures_management(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.SelectLayerByLocation_management('cities', 'WITHIN_A_DISTANCE', 
                                       'chihuahua', '1.5 Miles')
arcpy.SelectLayerByLocation_management('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.SelectLayerByLocation_management('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.SelectLayerByLocation_management('cities', 'WITHIN_A_DISTANCE_GEODESIC', 
                                       'chihuahua', '200')

许可信息

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

相关主题