Os recursos de dissolução melhoram a eficiência do geoprocessamento?

9

Eu tenho um grande conjunto de dados de linha (> 140.000 recursos). Existe uma vantagem de processamento, no tempo necessário ou (mais importante) na memória usada:

  • para executar Dissolver sobre os dados antes de executar o tampão ?
  • para executar o Dissolve nas entradas para duas operações de identidade ?

Geralmente, eu esperaria até todo o geoprocessamento terminar e depois faria um Dissolve no final. No entanto, estou depurando o script muito antigo de outra pessoa e não sei se ele estava dissolvendo tudo repetidamente por um motivo (de volta no Arc 9.3), ou simplesmente não pensou nas alternativas. (O mesmo script projeta dados repetidamente entre ferramentas de geoprocessamento, portanto a lógica já é questionável.)

Érica
fonte
Não tenho dados concretos para fazer backup disso, mas, de acordo com minha experiência pessoal: sempre faça buffer antes de uma dissolução, se possível, porque o buffer de um recurso de linha tão complexo leva uma eternidade.
Npeterson

Respostas:

9

Se o uso da memória é sua principal preocupação, então muitos recursos pequenos (baixa contagem de vértices) provavelmente serão mais do seu agrado do que alguns recursos muito grandes (alta contagem de vértices). Mas você pode achar que "muitos recursos" podem eventualmente sobrecarregar até "muitos vértices" para velocidade de processamento.

Se você pensar em como os algoritmos devem ser estruturados para processar todos os recursos em relação a todos os recursos entre duas classes de recursos, você estará trabalhando com loops multi-aninhados (para recursos em FC1 e FC2 e para os vértices em Feature1 e Feature2). Em operações como desenho, o número de solicitações de desenho é frequentemente uma preocupação maior do que os vértices em cada solicitação, mas com operações tema a tema, os algoritmos principais provavelmente se basearão na contagem de vértices em cada par F1 / F2 , com uma " notação O grande " de "O (N * M)" (o tempo para concluir a operação está relacionado ao fator do número de vértices envolvidos), que, para grandes recursos nos dois conjuntos de dados, está próximo o suficiente para O (N ^ 2) para que você se preocupe com a conclusão do trabalho.

Tive sucesso ao sobrepor recursos maciços (como Rússia, Canadá, EUA, Austrália, Brasil, Noruega) com uma grade de 5 graus (rede de pesca) para reduzir a complexidade do recurso para processamento intermediário. Eu já vi operações point-in-polygon em uma camada de PAÍSES 1: 15m com restrição de vértices executadas 100-1000 vezes mais rápido que a tabela original (com apenas um aumento de 20x na contagem de recursos). Você precisa ter cuidado em sua lógica de processamento para lidar corretamente com relacionamentos um para muitos e muitos para muitos, especialmente nos casos em que existe um limite falso.

Há também um aspecto de "retornos decrescentes" na economia de trabalhar com recursos menores - optei por uma grade de 5 graus testando o desempenho da interseção com 90, 45, 30, 20, 15, 10, 5, 3, 2 e Grades de 1 grau, que mostraram um aumento alarmante no tempo de processamento à medida que o número total de recursos aumentou.

Não são momentos em que menos recursos com mais vértices são mais eficientes, por isso é provavelmente vale a pena o esforço para fazer alguns testes na ordem de operação com dados reais (não simplificado subconjuntos de teste) antes de cometer a uma abordagem sobre a outra (utilização RAM equilíbrio com tempo de execução).

NOTA: Executei novamente o exercício de grade com o hardware moderno e obtive o desempenho ideal com uma sobreposição de 30 graus, aumentando o risco de recursos muito pequenos e aumentando a importância da avaliação com dados de produção.

Vince
fonte
10

Uma operação Dissolver geralmente reduz o número de recursos, arcos e nós dentro de uma camada, principalmente para camadas com comprimentos significativos de limites compartilhados. Como o tempo gasto durante uma operação de Buffer é altamente dependente do número de nós, o pré-processamento com o Dissolve pode reduzir significativamente o tempo de execução (e os requisitos de memória). Se vale a pena ou não no seu caso, dependerá da extensão em que você poderá reduzir o número de nós (dependendo da camada de dados) e a eficiência da operação Dissolve em comparação com o Buffer . Na minha experiência, usando o Java Topology Suite, uma operação Dissolve pode ser bastante rápida em comparação comBuffer , embora o desempenho do Dissolve varie significativamente de acordo com a biblioteca. A outra consideração é que o Dissolve é fortemente afetado por erros topológicos. Se a camada contiver erros, será necessário executar a limpeza do vetor antes da operação Dissolver, o que aumentará o tempo de execução do fluxo de trabalho.

WhiteboxDev
fonte
2
Não tenho tanta certeza sobre a parte "requisitos de memória". Recursos maiores requerem mais armazenamento. O buffer de recursos muito complexos é mais difícil (e exige muita RAM) do que o buffer de recursos simples. É mais provável que exista um "ponto ideal" entre "muitos recursos" e "muitos vértices por recurso" do que fazer uma afirmação geral de que a dissolução primeiro sempre melhorará o desempenho do buffer.
Vince
@Vince, eu concordo que o efeito de Dissolver é muito mais eficaz na redução do tempo de execução do que na memória, mas, em última análise, se um grupo de recursos tiver menos recursos com menos nós totais, será necessário menos memória para representar.
precisa saber é o seguinte
Reduzirá a memória total, mas não a memória por recurso. Executar operações de geoprocessamento em recursos massivos e complexos leva mais tempo do que em recursos mais simples - e não apenas de maneira linear, na minha experiência.
Nmpeterson
@Vince, Also Dissolve, dependendo da camada, resultará em menos recursos maiores. O tamanho geográfico real de um recurso não tem nada a ver com seus requisitos de memória. Tudo se resume à sua complexidade, que é uma função do número de nós usados ​​para representá-lo. No entanto, eu concordo com você sobre o equilíbrio do ponto ideal.
WhiteboxDev
@mpmperson, Sim, é verdade que isso é feito por camada e não por recurso. Mas, geralmente, amortecemos as camadas e não os recursos individuais. Você com certeza está certo quanto à não linearidade do desempenho no processamento geoespacial! Parece que esse é sempre o nosso caso!
precisa saber é o seguinte