Arcmap Выбор по атрибуту с Python

9

Я хотел бы, чтобы следующее выделило (выделило) слой "project", который пересекает сетку, а затем вытащил запись из выбранной "Grid". Мне не нужно сохранять слой.

Примечание. Запуск сценария из ArcMap в окне консоли Python.

import arcpy

# Make a layer from the feature class
arcpy.MakeFeatureLayer_management("project","project_lyr")

# Then add a selection to the layer based on location to features in another feature class 
arcpy.SelectLayerByLocation_management("project_lyr","INTERSECT","Grid")

Этот код выполняется и никаких ошибок не выдается, но он не выделяет (выделяет) какие-либо функции. Любая идея почему? Также работает очень медленно.

Результаты

В основном я пытаюсь сделать это:

введите описание изображения здесь

Это работает очень быстро, почти мгновенно, но я хочу сделать то же самое с использованием Python. Мне просто нужно значение из таблицы выбранного объекта, мне не нужна копия слоя.

Частично решением может быть использование рабочей области в памяти, которая

Запись данных в рабочее пространство в памяти часто происходит значительно быстрее, чем запись в другие форматы ...

Просто не уверен, как реализовать рабочее пространство в памяти

Тристан Форвард
источник
Вы запускаете этот скрипт из ArcMap (т.е. в консоли Python)? Или из-за пределов ArcMap (т.е. внутри IDLE или другого редактора Python)? Единственный способ, которым ArcMap будет «выбирать (выделять) любые объекты», - это использовать в ArcMap. Я подозреваю, что вы запускаете скрипт из-за пределов ArcMap, потому что выполнение import arcpyкоманды занимает некоторое время.
dmahr
Я запускаю скрипт из ArcMap в окне консоли Python.
Тристан Форвард
Если вы запускаете его из ArcMap, вам не нужна arcpy.MakeFeatureLayer()линия, так как projectэто уже слой. Просто делай arcpy.SelectLayerByLocation_management("project","INTERSECT","Grid").
dmahr
отличный формат вопроса!
Брэд Несом
Благодаря @dmahr, все еще работает медленнее, чем встроенный Select by Attribute, но работает.
Тристан Форвард

Ответы:

2

Хороший вопрос!

Dmahr прав: быстрее просто выбрать слой, а не создавать векторный слой. Я также добавил бы остальные переменные, даже если они не являются обязательными.

arcpy.SelectLayerByLocation_management ("project_lyr", "INTERSECT", "Grid", "#", "NEW_SELECTION")

Еще одна вещь, которую я нахожу, это то, что запуск вещей в окне Python в ArcMap всегда происходит медленнее. Я обнаружил, что если вы напишите код в файл .py, добавите его в виде сценария на панель инструментов и затем запустите, обработка будет выполняться быстрее.

Коди Браун
источник