Ferramenta Criar camada a partir dos recursos selecionados: como é armazenada a lista de recursos?

12

No ArcGIS Desktop, existe uma ferramenta chamada Create Layer from Selected Features . Usando esta ferramenta, posso converter uma seleção em uma camada no ArcMap.

Meu palpite é que haja uma "lista de recursos" incorporada à camada em algum lugar que isola os recursos a serem mostrados no mapa.

Eu teria pensado que a "lista de recursos" teria sido armazenada em uma wherecláusula em uma consulta de definição como uma lista de objectids. Por exemplo: where objectid in(123,456,789,...). No entanto, este não é o caso.

Se a camada não possui uma WHEREconsulta de cláusula ou definição, como é armazenada a lista de recursos?

Wilson
fonte
2
Há uma grande diferença entre o item de menu e a ferramenta de geoprocessamento. O que você está falando é antigo. Você pode usar os dados armazenados no fidset para criar suas camadas.
FelixIP # 22/17
2
Tenho certeza de que não existe uma cláusula WHERE armazenada quando você cria uma Camada de Seleção e que, uma vez criada, NÃO é possível descobrir a seleção original usada para criá-la. Espero estar errado na forma de uma resposta, porque eu estava lidando com uma camada de seleção muito antiga recentemente e descobrir a seleção original de recursos usados ​​para criá-la seria útil.
Dan C
1
Fidset é propriedade da camada. Isto é ; sequência separada para armazenar os FIDs de seleção.
precisa saber é o seguinte
Criar camada a partir de recursos selecionados NÃO cria uma camada DINÂMICA. A camada resultante não é dinâmica. É baseado em um FIDset. Se você alterar os dados de origem, os FIDs mudarão e sua camada de seleção será interrompida. Este é nada como uma camada de consulta, que armazena uma cláusula where
jbalk

Respostas:

14

Criar camada a partir de recursos selecionados NÃO cria uma camada DINÂMICA . A camada resultante não é dinâmica. É baseado em um FIDset.

Se você alterar os dados de origem, os FIDs mudarão e sua camada de seleção será interrompida.

Não há cláusula where em uma camada de seleção. É baseado no FIDset (os FIDs que foram selecionados quando você usou 'Criar camada a partir dos recursos selecionados').

Observe que, se você adicionar ou remover registros dos dados de origem, os FIDs serão alterados e sua camada de seleção exibirá registros incorretos.

Você está confundindo a camada de seleção com uma camada de consulta, que armazena uma cláusula where e é dinâmica.

EDIT: A lista de recursos para uma camada de seleção é armazenada na memória. É uma prática ruim usar camadas de seleção que não sejam para trabalho temporário, pois não há como recuperar a seleção original depois que a camada de seleção é interrompida.

Para encontrar a lista de recursos em uma camada de seleção, você pode usar muitos métodos diferentes, incluindo o SearchCursor, para criar uma lista de IDs.

Algo assim:

OIDlist = []
with arcpy.da.SearchCursor(layer, 'OBJECTID') as scur:
    for row in scur:
        OIDlist.append(row[0])

Do comentário por crmackey :

Também existe uma maneira integrada de descrever para obter o FIDSet. Esta é uma sequência, mas é fácil de converter em uma lista:

OIDlist = map(int, arcpy.Describe(layer).FIDSet.split(';'))
jbalk
fonte
1
Há também uma maneira integrada com o descrever para obter o FIDSet. Esta é uma string, mas é fácil de converter em uma lista: OIDlist = map(int, arcpy.Describe(layer).FIDSet.split(';'))
crmackey
Informação relacionada aqui: Gerar uma cláusula SQL WHERE de recursos selecionados
Wilson
11

A melhor maneira de entender como Create Layer from Selected Featuresé essa referência que me deparei Crie uma camada temporária para selecionar recursos

Criar uma camada temporária permite fazer coisas, como fazer seleções, sem afetar a fonte de dados original. Essa camada não aparecerá no conteúdo do ArcCatalog, porque é criada na memória e simplesmente referencia os dados armazenados no disco. Essas camadas podem ser usadas como entradas para outras ferramentas de geoprocessamento dentro da sua sessão de trabalho. Depois de sair do aplicativo, as camadas na memória serão removidas.

A ferramenta Criar camada de recurso está no conjunto de ferramentas Camadas e exibições de tabela, na caixa de ferramentas Ferramentas de gerenciamento de dados. Clique com o botão direito do mouse na ferramenta Criar camada de recurso e clique em Abrir ou clique duas vezes nela para abrir a ferramenta.

O mecanismo que pode ler esse espaço em disco seria como acessar o "conjunto de resultados"

Além disso, conforme mencionado anteriormente e a Esri o cobre Trabalhando com recursos selecionados ,

Neste exemplo, a camada criada a partir dos recursos selecionados é útil apenas como um conjunto de dados de trabalho temporário (por exemplo, para uso como entrada em um modelo de geoprocessamento). A nova camada faz uma lista dos FeatureIDs (FIDs) ou ObjectIDs (OIDs) dos recursos selecionados e se tornará inválida quando a fonte de dados original for atualizada ou alterada .

Além disso, aqui estão mais discussões como uma leitura geral, Usando o espaço de trabalho na memória , relacionado ao in_memoryespaço de trabalho. Isso é destinado apenas a informações adicionais se você estiver interessado.

whyzar
fonte
2

Meu palpite é que, a camada de Create Layer From Selected Featuresnão é baseada em uma WHEREcláusula ou uma condição lógica, porque o conjunto de seleção pode ser criado sem envolver a lógica.

Por exemplo, você pode adicionar / excluir manualmente todos os recursos do conjunto de seleção usando o menu principal arrastando uma caixa, que pode ser de um dos anteriores Selecionar por atributos / local.

Meu palpite é que o conjunto de seleção ( IFeatureSelection) é apenas um conjunto extenso de resultados (contendo cópias dos IDs da camada original), em vez das regras que definem o conjunto de resultados. Daí o aviso na documentação vinculada de que os IDs podem se tornar inválidos se os IDs da camada original forem alterados.

tinlyx
fonte