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

Сводка

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

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

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

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

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

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

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

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

  • Число выбранных записей будет указано в истории геообработки в разделе Параметры > Количество. Дополнительно, инструмент Посчитать строки может использоваться для определения числа выбранных записей. В 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: Да

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