Estou tentando entender a criação de um geoprocesso com o ModelBuilder, mas não sei por que é importante usar camadas de recursos em vez de classes de recursos ao criar um geoprocesso com o ModelBuilder. Alguém pode explicar por que?
Estou tentando entender a criação de um geoprocesso com o ModelBuilder, mas não sei por que é importante usar camadas de recursos em vez de classes de recursos ao criar um geoprocesso com o ModelBuilder. Alguém pode explicar por que?
Respostas:
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
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.
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.
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.
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.
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)
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.
in_memory
trabalho 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.
in-memory
espaço de trabalho é basicamente um geodatabase de arquivos que fica na memória, se você quiser pensar dessa maneira.