Recorte conjuntos de dados de polígonos muito grandes no ArcGIS?

8

Estou tentando recortar um conjunto de dados de polígono grande (~ 5 GB, milhares de recursos) por um conjunto de dados de polígono muito menor (~ 40 recursos). Existe uma prática recomendada ou uma rota mais eficiente para executar esta tarefa?

O clipe do geoprocessador padrão é executado indefinidamente em um conjunto de dados desse tamanho. Alguma forma de seleção e exportação espacial seria mais eficiente?

EDIT : Algumas ótimas respostas abaixo. Selecionei o que considero a resposta mais completa, mas cada resposta fornece uma visão única do problema. Obrigado!

Radar
fonte
4
Como a extensão do conjunto de dados menor se compara à do maior? Se as extensões forem muito diferentes, você considerou o primeiro recorte (ou apenas a seleção por interseção) do grande conjunto de dados com a extensão do menor para reduzir o tamanho do problema?
whuber
2
Recorte conjuntos de dados de polígonos muito grandes no ArcGIS? Não faça isso. Depois de muitos anos tentando isso, acabamos usando um banco de dados e obtemos o trabalho de SQL, tempo é dinheiro.
Mapperz
@whuber - +1 As extensões são bastante semelhantes, embora eu tenha usado seu método sugerido no passado.
Radar
Que pena ... Concordo plenamente com o Mapperz. Também vejo que o @dmahr postou uma resposta muito boa que deve ajudá-lo a encontrar uma solução ou solução alternativa, se for possível. Ele fornece uma boa estratégia para lidar com qualquer grande conjunto de dados usando qualquer software.
whuber
Neste blog, parece ser bastante problemático no ArcGIS. donmeltz.com/blog/index.php/2011/06/11/…
Nicklas Avén

Respostas:

13

Como sempre, ao lidar com problemas de escalabilidade, é melhor começar pequeno e simples e trabalhar de maneira constante até grandes e complexos.

No caso do clipe, ele deve ser inteligente o suficiente para lidar com grandes conjuntos de dados, porque os agrupa internamente . Mas como não está funcionando, tente executar o Clip com o conjunto de dados de entrada (os dados a serem cortados) e o conjunto de dados do clipe (os dados com os quais o clipe é executado) com muitos, muitos menos recursos . Como um recurso de clipe, com apenas a área ao seu redor no conjunto de dados de entrada (use consultas de definição para reduzi-los). Verifique se está funcionando bem e aumente constantemente o escopo da operação de geoprocessamento até o desempenho diminuir.

Algumas idéias específicas:

  • Dissolva os recursos de clipe em uma única classe de recursos com várias partes.

  • Reduza o tamanho do arquivo dos recursos de entrada usando o Simplify Polygon . Um conjunto de dados vetoriais de 5 GB é enorme - mesmo um arquivo de forma de todos os 250.000 grupos de blocos do Censo dos EUA é de apenas 1 GB.

  • Divida os recursos de entrada em partes. Teoricamente, as rotinas de lado a lado internas da ferramenta de geoprocessamento já deveriam estar fazendo isso, mas você nunca sabe. Pode haver um problema de limitação de tamanho de arquivo de 32 bits em que você não pode ter um arquivo shapefile maior que 2 32 bytes = 4,29 GB.

Algumas outras dicas mais gerais de desempenho de geoprocessamento:

  • Verifique se os dois conjuntos de dados têm o mesmo sistema de coordenadas. Se possível, é mais rápido ter ambos em um sistema de coordenadas geográficas sem projeção.

  • Verifique se você não está ficando sem uma unidade de rede. Use o disco rígido local mais rápido ou, se possível, um SSD.

  • Carregue o conjunto de dados do clipe na memória .

  • Exclua os campos de atributos desnecessários (e junte-os mais tarde, se necessário).

  • Outras dicas de desempenho de geoprocessamento .

dmahr
fonte
5
+1 Muito bom. Posso sugerir abordar o problema um pouco mais quantitativamente? Em vez de apenas esperar pelo início da degradação do desempenho, aproveite a oportunidade para cronometrar as operações. Mesmo algo tão bruto quanto assistir ao relógio do sistema pode ser útil. A plotagem do tempo em relação ao tamanho do problema pode indicar como ele é dimensionado, oferece uma maneira de extrapolar o esforço para o problema completo e até revelar locais onde a escala muda (você atinge uma parede de recursos ou o algoritmo interno muda, por exemplo) . É fácil obter informações e pode ser muito útil.
whuber
Eu concordo totalmente com Whuber nisso. Eu sempre acompanho o tempo de desempenho do geoprocessamento, especialmente com objetos timedelta em Python (quando estou escrevendo com o ArcPy). Outra dica é usar um monitor de sistema mais completo, como o Process Explorer . Isso pode fornecer muito mais informações sobre desempenho e ajudar a identificar gargalos.
dmahr
7

Algumas funções do ArcGIS, como Union e Intersect, usam processamento de subdivisão adaptável, conforme descrito em Processamento em mosaico de grandes conjuntos de dados . Infelizmente, parece que o Clip não possui uma grande ferramenta de geoprocessamento.

Parece que você pode replicar esse conceito por meio de um script ModelBuilder ou Python que usa a ferramenta Split (ArcInfo) para ajudar a processar conjuntos de dados grandes demais.

RyanKDalton
fonte
7

Ou você pode desistir do ArcGIS e tentar fazer o clipe no OGR. Veja uma explicação aqui . Descobri que isso funciona quando nada mais funciona!

Darren Cope
fonte
1
ogr2ogr -clipsrc clipping_polygon.shp output.shp input.shp Porra, isso é lindo.
RK
3

Eu acho que até selecionar por local funcionará para você, primeiro você seleciona todo o polígono que se cruza com o seu shapefile menor e depois os exclui. espero que isso possa ser mais rápido. deixe-me saber se funciona para você. Obrigado.

Ramakrishna Billakanti
fonte
Não é uma má ideia em geral - mas você leu os comentários da pergunta original? A consulta preliminar não reduzirá muito o tamanho do problema.
whuber
2
Isso realmente funciona para mim. E, a propósito, isso é bem diferente de cortar na medida do possível. Eu tenho dois arquivos vetoriais (um com> 7 milhões de recursos e outro com ~ 5000) com a mesma extensão, mas com menos de 1% desses 7 milhões de recursos cruzando os recursos de clipe. Esperei mais de 8 horas para que o clipe funcionasse no conjunto de dados completo ... ele nunca terminou antes de desistir. Em vez disso, selecionei por local os recursos que se cruzam, exportei a seleção para sua própria classe de recurso e executei o clipe. Tempo total para isso (incluindo a seleção): cerca de 1,5 minutos.
Tom
É uma boa opção para recortar pontos por polígonos, como no meu caso. Tentei cortar cerca de 1 milhão de pontos por 1 milhão de polígonos - deixe-o correr por dois dias e nunca terminei. Selecione por local e a exportação foi realizada em menos de 5 minutos. Eu não sei por que eu não acho que desta opção em primeiro lugar :-)
Janina