Я продолжаю думать, что я должен что-то упустить, но в ArcGIS 10, похоже, нет инструмента для выбора объектов (в частности, полигонов) из слоя в точке (X, Y) с помощью ArcPy. Параметры для такого инструмента будут просто именем слоя и местоположением XY.
В настоящее время я обхожу это путем создания точечного класса объектов, содержащего точку, и выполнения над ней SelectLayerByLocation. Однако, когда класс объектов полигонов находится в Oracle (доступ к которому осуществляется через ArcSDE 9.x) и содержит 3,5 миллиона полигонов, время, необходимое для выбора, может составить более 5 минут, когда я думаю, что секунда или две (с меньшим количеством кода) будут более подходящий. Класс пространственных объектов имеет пространственный индекс, и я попытался использовать arcpy.env.extent (который SelectLayerByLocation игнорирует), чтобы ограничить доступ к географической области, но производительность остается очень низкой.
Есть ли более быстрый способ сделать это с помощью ArcGIS Desktop 10 и ArcPy?
Ответы:
Другим подходом к этому будет использование инструмента Пространственное соединение. Используйте точку в качестве входного векторного слоя, как указано выше, и слой многоугольника в качестве объектов идентификации.
В отличие от SelectLayerByLocation, SpatialJoin поддерживает среду экстентов .
JOIN_ONE_TO_MANY может показаться нелогичным, но, поскольку у вас есть только одна функция объединения, основная функция этого параметра - отключить агрегацию и правила объединения. KEEP_COMMON позаботится о том, чтобы ваш вывод ограничивался только полигоном, который пересекает вашу точку. Сопоставления полей будут ограничивать выходные атрибуты только формой и атрибутами слоя многоугольника; значение по умолчанию также включает атрибуты точечного слоя.
Остальные значения по умолчанию будут работать нормально, поэтому вы можете пропустить оставшиеся аргументы.
источник
Я только что понял что-то ...
Если вы используете это для реализации Сервиса геообработки, вы можете также реализовать Сервис объектов с вашим полигональным слоем и использовать операцию Запрос в сервисе объектов.
Вы можете использовать простое расположение XY с операцией запроса сервисов объектов, а также управлять выходными атрибутами, включая форму.
У вас могут быть ограничения на количество объектов класса полигонов, которые вы можете предоставить, но если вы уже делаете его доступным для сервиса геообработки, вы также сможете создать сервис пространственных объектов.
источник
Этот ответ пришел со старых дискуссионных форумов ArcGIS .
Спасибо Джейсону Шейреру за более краткий код:
И особенно Крису Снайдеру за совет по производительности:
источник