Shapefile grande para varredura

13

Eu tenho um arquivo shapefile grande (1 GB) e preciso rasterizá-lo. Eu já tentei o seguinte.

1.) Importe-o para o GRASS usando v.in.ogrisso falhou com a mensagem de erro: ERRO: G_realloc: não é possível alocar 498240036 bytes em break_polygons.c: 188

2.) Minha segunda idéia foi usar o PostGIS. Importe o shapefile, faça uma nova amostra no local x, y da grade e exporte esses pontos e crie uma grade a partir de xyz. Importei com sucesso os arquivos de forma (polígonos e pontos), mas a interseção de 1 milhão de polígonos com 300 mil pontos parece muito lenta. Eu usei o seguinte postGIS satement, talvez haja espaço para melhorias.

select polygons.land_id,grid.geom from grid,polygons where grid.geom && polygons.geom and within(grid.geom,polygons.geom)

3.) Eu também tentei usar simplify()no PostGIS. Mas perdi para muitos polígonos pequenos (ou seja, algumas áreas cobertas apenas com polígonos pequenos tornaram-se nulas).

Qualquer idéia seria muito apreciada.

johannes
fonte
1
Qual versão do GRASS você usou? Deve ser pelo menos 6,4. Observe que no GRASS 7 o suporte a arquivos grandes também é implementado para mapas vetoriais, o que deve ajudar a superar o problema indicado (também é muito mais rápido).
markusN
Atualmente, estou usando o GRASS 6.4. Vou atualizar para 7 em breve, obrigado pela dica.
21411 johannes
Você pode adquirir as últimas pré-compilados winGRASS 7 binários aqui: wingrass.fsv.cvut.cz/grass70
markusN

Respostas:

14

Você pode tentar o gdal_rasterize , embora eu não o tenha usado com um arquivo shapefile tão grande, portanto você pode ter os mesmos problemas que o GRASS. Eu acho que algo como o seguinte deve funcionar (com GDAL> = 1.8.0):

gdal_rasterize -a AN_ATTRIB -l THE_LAYER -a_nodata -9999 -a_srs EPSG:27700 -co TILED=YES -tr 10 10 -ot Float32 src.shp dest.tif

Obviamente, você terá que brincar com algumas das opções, dependendo do seu shapefile de origem. O parâmetro mais importante é -tr, que especifica a resolução de um pixel; sem ele, você pode encontrar uma varredura muito grande ...

Se você deseja manter o GRASS, tente definir uma extensão menor para a rasterização e divida o processo em pedaços gerenciáveis, depois faça o mosaico dos rasters em um.

MerseyViking
fonte
1
gdal rasterize fez tudo isso em aproximadamente 5 minutos :). Muito obrigado por isso!
Johannes
Legal! Estou feliz que funcionou.
MerseyViking
3

Em relação à sua primeira intenção, você poderia tentar executar o comando v.in.ogr em uma máquina com mais RAM ou trocar espaço em disco?

Caso contrário, você pode dividi-lo em muitos arquivos e rasterizar cada um deles antes de mesclá-los novamente.

simo
fonte
1

Se você precisar de mais controle ao fazer uma rasterização, consulte o script poly_density.py do perrygeo, que usa GDAL sob o capô, mas pode ser usado para sobrepor recursos ou adicionar avaliações condicionais além daquelas possíveis gdal_rasterizesozinho.

scw
fonte
0

Como Jack, o Estripador, faça-o em partes. Do postgis, exporte fatias dos dados importados na grama e converta.

Pablo
fonte