Por que é importante usar as camadas de recurso no ModelBuilder?

Respostas:

4

Os modelos podem ter muitas camadas de saída do subprocesso, dependendo do tamanho e da complexidade. Para eliminar os arquivos que estão sendo gravados no disco rígido, algumas ferramentas fazem com que você use as camadas de recursos (por exemplo, Iterate Selection Selection , ou Select by Attribute ). As camadas de recursos são temporárias e não persistirão após o término do modelo.

Consulte Criar camada de recurso

artwork21
fonte
9

Existem algumas razões pelas quais você deseja fazer referência às Camadas de recursos no ModelBuilder, em oposição às Classes de recursos. Primeiro, é útil entender as diferenças.

  • "Classes de recursos" como simplesmente referências aos dados brutos, em sua totalidade. Um exemplo simples disso em que o FC é um shapefile em disco.
  • "Camadas de recursos" são referências a uma abstração dos dados, na qual você pode interagir com um ou mais dos recursos do conjunto de dados brutos (em oposição a todo o conjunto de dados). Camadas é o que você está interagindo efetivamente depois de carregar os dados no ArcMap.

Portanto, considerando esse pano de fundo, aqui estão algumas razões pelas quais você deseja usar a ferramenta "Criar camada de recurso" como um intermediário entre os dados brutos e outras ferramentas de geoprocessamento.

  1. Muitas ferramentas de GP no ModelBuilder requerem o uso de uma camada e não aceitam um FC como entrada. Isso é particularmente verdadeiro se suas ferramentas de GP precisam selecionar dados. Nesse cenário, você precisa interagir com a CAMADA, não com os dados brutos. Exemplo: Se você não tinha o ArcMap (ou outro programa GIS) aberto, como você selecionaria recursos do shapefile bruto ... você não pode. Você precisa interagir com a camada no ArcMap para fazer essa seleção.
  2. Se você deseja executar um Modelo no ArcCatalog ou exportá-lo para um script Python que possa ser executado fora do ArcGIS, é necessário usar "Camadas de Recursos" para que seus dados de origem brutos sejam convertidos em "Camadas". Isso seria análogo a "adicionar dados" à sua sessão do ArcMap.

  3. O uso de camadas facilita o subconjunto de dados à medida que você avança no processo do ModelBuilder. Digamos que você queira processar todos os dados com o atributo "A" com um método, mas todos os dados com o atributo "B" com outro método. Você pode fazer referência aos seus dados brutos uma vez, depois dividir os dados em duas "ramificações" usando as Camadas de recursos e processar cada conjunto de forma independente, mas afetando / atualizando o conjunto de dados de origem única.

  4. Você pode criar camadas de recurso "in_memory" que são realmente "caixas" temporárias de processamento de dados e que podem processar os dados muito mais rapidamente do que gravar no disco após cada operação. Também limita a quantidade de lixo que você precisa limpar após a conclusão do processamento.
RyanKDalton
fonte
Muito obrigado Ryan. Sua resposta é muito completa e clara.
Diego Pardo
7

A incorporação de camadas temporárias em seus modelos também diminui o tempo de processamento. Do ponto de vista do processamento, é muito mais eficiente gravar na memória do que gravar no disco. Da mesma forma, você pode gravar dados temporários no espaço de trabalho in_memory , que também é mais eficiente em termos computacionais.

Muitas operações no ArcGIS requerem camadas temporárias como entradas. Por exemplo, Selecionar Camada por Local (Gerenciamento de Dados) é uma ferramenta muito poderosa e útil que permite selecionar recursos de uma camada que compartilham relações espaciais com outro recurso de seleção. Você pode especificar relacionamentos complexos, como "HAVE_THEIR_CENTER_IN" ou "BOUNDARY_TOUCHES" etc.

Editar:

Por curiosidade, e para elaborar as diferenças de processamento usando camadas de recursos e espaço de trabalho in_memory, considere o seguinte teste de velocidade em que 39.000 pontos são armazenados em buffer 100m:

import arcpy, time
from arcpy import env

# Set overwrite
arcpy.env.overwriteOutput = 1

# Parameters
input_features = r'C:\temp\39000points.shp'
output_features = r'C:\temp\temp.shp'

###########################
# Method 1 Buffer a feature class and write to disk
StartTime = time.clock()
arcpy.Buffer_analysis(input_features,output_features, "100 Feet")
EndTime = time.clock()
print "Method 1 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

############################
# Method 2 Buffer a feature class and write in_memory
StartTime = time.clock()
arcpy.Buffer_analysis(input_features, "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 2 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

############################
# Method 3 Make a feature layer, buffer then write to in_memory
StartTime = time.clock()
arcpy.MakeFeatureLayer_management(input_features, "out_layer")
arcpy.Buffer_analysis("out_layer", "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 3 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

insira a descrição da imagem aqui


Podemos ver que os métodos 2 e 3 são equivalentes e aproximadamente 3x mais rápidos que o método 1. Isso mostra o poder de usar as camadas de recursos como etapas intermediárias em fluxos de trabalho maiores.

Aaron
fonte
Isso parece conflitar duas coisas (dados na memória e camadas de recursos). Eles não são os mesmos. Os dados gravados na área de in_memorytrabalho ainda são dados (por exemplo, classes e tabelas de recursos) ainda ocupam (potencialmente muito) espaço. As Camadas de Recursos, por outro lado, são uma visão sobre os dados, permitindo selecionar um subconjunto dos dados e usá-lo em processos subseqüentes, em vez de duplicar dados apenas para obter um subconjunto deles. As camadas de recursos ocupam quase nenhum espaço. Eu gosto de pensar neles como "ponteiros com metadados", por exemplo, eles apontam para alguns dados e descrevem como consultá-los / renderizá-los.
Blah238
Apenas para acrescentar ao meu comentário anterior, li em algum lugar neste site que o in-memoryespaço de trabalho é basicamente um geodatabase de arquivos que fica na memória, se você quiser pensar dessa maneira.
Blah238
Como um banco de dados geográfico de arquivo, mas as áreas de forma não são calculadas quando in_memory - fornecerá um link para isso posteriormente.
PolyGeo
No seu segundo exemplo atualizado, você está criando uma classe de recurso na memória, não uma camada de recurso.
Blah238
2
Já faz um tempo, mas aqui está o link que prometi há mais de 6 meses.
PolyGeo