描述
根据与另一个数据集中的要素的空间关系来选择要素。
输入要素参数中的每个要素将根据选择要素参数中的要素进行评估。如果满足指定的关系参数,则选择输入要素。
使用方法
如果输入为要素类或数据集路径,则此工具将自动创建并返回应用了该工具结果的新图层。
用来评估空间关系的坐标系可能会对结果产生影响。在一个坐标系中相交的要素在另一个坐标系中可能不相交。
- 此工具可在输入要素数据源的坐标系中评估空间关系。将输出坐标系环境设置为当前地图 [图层] 可使用与当前显示区域相同的坐标系。
可使用该工具根据要素与同一图层中其他要素的空间关系来选择要素。有关示例,请参阅在图层内基于空间关系进行选择。
所选记录的数量将在参数 > 计数下的地理处理历史中列出。此外,获取计数工具也可以用于计算所选记录的数量。在 Python 中,也可以通过工具的 Result 对象访问所选记录的数量。
有关使用三维空间关系 3D 相交和在某一 3D 距离范围内(Python 中的 INTERSECT_3D 和 WITHIN_A_DISTANCE_3D)的详细信息,请参阅按 3D 位置关系选择。
在使用企业级地理数据库数据时,相交 (DBMS) 空间关系(Python 中的 INTERSECT_DBMS)可提供比相交关系(Python 中的 INTERSECT)更好的性能;但是,其仅在特定条件下才受支持。如果满足所有条件,则空间操作将在企业级地理数据库管理系统 (DBMS) 中而非客户端上执行。使用此空间关系时应考虑以下问题:
- 要在 DBMS 中运行该操作,必须满足以下要求:
- 输入要素和选择要素参数值来自同一企业级地理数据库工作空间,并且必须具有相同的空间参考和几何存储类型。
- 基础 DBMS 为 IBM Db2、Oracle、PostgreSQL、SAP HANA 或 Microsoft SQL Server。
- 此选项支持的几何存储类型为 ST_GEOMETRY(Db2、Oracle、PostgreSQL 和 SAP 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 容差的详细信息,请参阅要素类基础知识。
- 支持 Db2、Oracle、PostgreSQL、SAP HANA 和 SQL Server 中的企业级地理数据库。每个数据库都有自己的受此关系支持的几何存储类型。请参阅特定于您的 DBMS 的供应商文档,以确定每种几何存储类型的期望内容。在运行空间操作时,可能会有一些存储限制会影响性能和可扩展性。
- 要在 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 (可选) | 指定要评估的空间关系。
| String |
select_features (可选) | 输入要素参数中的要素将根据它们与此图层或要素类中要素的关系进行选择。 | Feature Layer |
search_distance (可选) | 将被搜索的指定距离。仅当 overlap_type 参数设置为以下选项时,该参数才有效:WITHIN_A_DISTANCE、WITHIN_A_DISTANCE_GEODESIC、WITHIN_A_DISTANCE_3D、INTERSECT、INTERSECT_3D、HAVE_THEIR_CENTER_IN 或 CONTAINS。 如果选择 WITHIN_A_DISTANCE_GEODESIC 选项,请使用线性单位,例如千米或英里。 | Linear Unit |
selection_type (可选) | 指定如何将选择内容应用于输入,以及如何同现有选择内容进行组合。该工具不包含清除现有选择内容的选项;请使用按属性选择图层工具上的 CLEAR_SELECTION 选项。
| String |
invert_spatial_relationship (可选) | 指定将使用空间关系评估结果,还是使用反转结果。例如,可使用此参数获取不相交或与另一数据集中的要素不在指定距离范围内的要素的列表。
| Boolean |
派生输出
名称 | 说明 | 数据类型 |
out_layer_or_view | 已应用选择的已更新输入。 | 要素图层;镶嵌图层 |
out_layers_or_views | 已更新输入的名称。 | 要素图层;镶嵌图层 |
count | 所选记录的数量。 | 长整型 |
代码示例
以下 Python 窗口脚本演示了如何在即时模式下使用 SelectLayerByLocation 函数。
import arcpy
arcpy.SelectLayerByLocation_management("parcel_lyr", "have_their_center_in",
"c:/kamsack.gdb/city_limits")
以下独立脚本显示了如何在工作流中使用 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))
以下独立脚本显示了 overlap_type 参数的 WITHIN_A_DISTANCE 和 WITHIN_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: 是