Выбрать в слое по расположению (Управление данными)

Сводка

Выбирает объекты на основе пространственных отношений с объектами в другом наборе данных.

Каждый объект Входных объектов оценивается относительно объектов параметра Вспомогательные объекты выборки. Если подходит параметр Отношение, будет выбран входной объект.

Подробнее о Выборе по расположению, включая примеры изображения взаимосвязей

Использование

  • Если входные данные представлены классом пространственных объектов или путем к набору данных, этот инструмент будет автоматически создавать и возвращать новый слой с результатом примененного инструмента.

  • Система координат, в которой оцениваемое пространственное отношение может влиять на результат. Объекты, пересекающиеся в одной системе координат, могут пересекаться или не пересекаться в другой системе.

    • Данный инструмент оценивает пространственные отношения в системе координат источника данных Входных объектов. Выберите для параметра среды Выходная система координат значение Текущая карта [Слои], чтобы использовалась та же система координат, что и при текущем отображении.

  • Этот инструмент может использоваться для выбора пространственных объектов на основе их пространственных отношений к другим объектам в том же слое. Примеры содержатся в разделе Выбрать на основе пространственного отношения в слое.

  • Число выбранных записей будет указано в истории геообработки в разделе Параметры > Количество. Дополнительно, инструмент Посчитать строки может использоваться для определения числа выбранных записей. В Python количество выбранных записей также можно получить из объекта инструмента Result.

  • Более подробно об использовании трехмерных пространственных отношений инструментами Пересечение 3D и В пределах расстояния 3D (INTERSECT_3D и WITHIN_A_DISTANCE_3D в Python) см. в разделе Выбор трехмерных отношений по расположению.

  • Пространственное отношение Пересечение (СУБД) (INTERSECT_DBMS в Python) обеспечивает лучшую производительность, чем отношение Пересечение (INTERSECT в Python) при использовании данных многопользовательских баз геоданных; но оно поддерживается только при соблюдении некоторых условий. Если все условия соблюдены, пространственная операция будет выполнена в СУБД многопользовательской базы геоданных, а не в клиентском приложении. При использовании этого пространственного отношения необходимо учитывать следующее:

    • Чтобы операция была запущена в СУБД, должны быть соблюдены следующие требования:
      • Значения параметров Входные объекты и Выбор объектов относятся к одной и той же рабочей области многопользовательской базы геоданных, и должны иметь одинаковую пространственную привязку и тип хранения геометрии.
      • Используемой СУБД является 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). См. раздел Управление базой геоданных для получения информации об установке и настройке СУБД, а также информации о настройке выбранного вами типа хранения геометрии, чтобы он был доступен для использования.
      • Если вы работаете с Oracle ST_GEOMETRY, вы должны настроить внешний протокол Oracle для доступа к ST_Geometry. Более подробную информацию см. в разделе Настройка extproc для доступа к ST_Geometry в Oracle.
      • Параметр Расстояние поиска не задан.
      • Параметр Тип выборки установлен на Новую выборку.
      • Существующая выборка перед запуском инструмента сделана с использованием определяющего запроса в слое а не выбранным поднабором.
    • Пространственная операция выполняется без применения допуска x,y в процессе обработки. Использование допуска x,y не поддерживается в СУБД. Вследствие этого результат выборки может немного отличаться от результата операции в клиентском приложении, где используется допуск x,y. См. Классы пространственных объектов. Основные понятия для дополнительной информации о том, как работает допуск x,y при выполнении операции на стороне клиента.
    • Поддерживаются многопользовательские базы геоданных в Db2, Oracle, PostgreSQL, SAP HANA и SQL Server. Для каждой имеется собственный тип хранения геометрии, поддерживающий эти отношения. См. документацию СУБД для информации о типах хранения геометрии. Возможны ограничения хранения, которые будут влиять на производительность и масштабируемость выполняемых пространственных операций.

Синтаксис

arcpy.management.SelectLayerByLocation(in_layer, {overlap_type}, {select_features}, {search_distance}, {selection_type}, {invert_spatial_relationship})
ParameterОбъяснениеТип данных
in_layer
[in_layer,...]

Объекты, оценка которых будет производиться на основе значений параметра select_features. К этим объектам будет применяться выборка.

Feature Layer; Raster Layer; Mosaic Layer
overlap_type
(Дополнительный)

Указывает оцениваемое пространственное отношение.

  • INTERSECT —Объекты во входном слое будут выбраны, если они пересекаются со вспомогательным объектом выборки. Это значение по умолчанию
  • INTERSECT_3D —Объекты во входном слое будут выбраны, если они пересекаются со вспомогательным объектом выборки в трехмерном пространстве (x, y и z).
  • INTERSECT_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_DISTANCE, WITHIN_A_DISTANCE_GEODESIC, WITHIN_A_DISTANCE_3D, INTERSECT, INTERSECT_3D, HAVE_THEIR_CENTER_IN, or CONTAINS.

Если используется опция 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_features и overlap_type игнорируются, если выбрана эта опция.
String
invert_spatial_relationship
(Дополнительный)

Определяет, будет ли использоваться выражение пространственного отношения или противоположное ему выражение. Например, этот параметр может использоваться для быстрого получения списка объектов, которые не пересекают либо не находятся в пределах данного расстояния от объектов другого набора данных.

  • NOT_INVERT —Будет использоваться результат запроса. Это значение по умолчанию
  • INVERT —Результат запроса будет инвертирован. Если используется параметр selection_type, до того, как выборка будет объединена с существующими выборками, произойдет ее инвертирование.
Boolean

Производные выходные данные

NameОбъяснениеТип данных
out_layer_or_view

Обновленный входной слой с применением выборки.

Векторный слой; слой мозаики
out_layers_or_views

Имена обновленных входных слоев

Векторный слой; слой мозаики
count

Число выбранных записей.

Long

Пример кода

SelectLayerByLocation, пример 1 (окно Python)

Пример скрипта окна Python для использования функции SelectLayerByLocation в режиме прямого запуска.

import arcpy
arcpy.SelectLayerByLocation_management("parcel_lyr", "have_their_center_in", 
                                       "c:/kamsack.gdb/city_limits")
SelectLayerByLocation, пример 2 (автономный скрипт)

Пример скрипта окна Python для выполнения функции 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_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: Да

Связанные разделы