Seleção de Arcmap por atributo com Python


9

Gostaria do seguinte para selecionar (destacar) a camada "projeto" que cruza a grade e, em seguida, puxar um registro da "Grade" selecionada. Não preciso salvar a camada.

Nota: Executando o script no ArcMap na janela do Python Console.

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")

Esse código é executado e nenhum erro é fornecido, mas não seleciona (destaca) nenhum recurso. Alguma idéia do porquê? Também corre muito lento.

Resultados

Basicamente, estou tentando fazer isso:

insira a descrição da imagem aqui

Isso roda muito rápido quase instantaneamente, mas eu quero fazer o mesmo usando python. Eu só preciso de um valor da tabela do recurso selecionado, não preciso de uma cópia da camada.

Parte da solução pode ser usar o espaço de trabalho na memória que é

Gravar dados no espaço de trabalho na memória geralmente é significativamente mais rápido do que gravar em outros formatos ...

Só não sei como implementar o espaço de trabalho na memória


Você está executando este script no ArcMap (ou seja, no console do Python)? Ou de fora do ArcMap (ou seja, dentro do IDLE ou de outro editor Python)? A única maneira de o ArcMap "selecionar (destacar) qualquer recurso" é no ArcMap. Suspeito que você esteja executando o script fora do ArcMap, porque o import arcpycomando demora um pouco para ser executado.
dmahr 4/07/12

Estou executando o script no ArcMap na janela do Python Console.
Tristan Forward

Se você o estiver executando no ArcMap, não precisará da arcpy.MakeFeatureLayer()linha, pois projectjá é uma camada. Apenas faça arcpy.SelectLayerByLocation_management("project","INTERSECT","Grid").
dmahr

ótimo formato de pergunta!
23420 Brad Nesom

Obrigado @dmahr, ainda é executado mais lentamente que o Selecionar por atributo interno, mas funciona.
Tristan Forward

Respostas:


2

Boa pergunta!

Dmahr está certo, é mais rápido simplesmente selecionar a camada em vez de criar uma camada de recurso. Eu também adicionaria o restante das variáveis, mesmo que sejam opcionais.

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

Outra coisa que acho, é que executar coisas na janela python do ArcMap é sempre mais lento. Acho que se você escrever o código em um arquivo .py, adicioná-lo como um script à caixa de ferramentas e executá-lo, o processamento será mais rápido.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.