Grand fichier de formes à raster

13

J'ai un grand fichier de formes (1 Go) et je dois le pixelliser. J'ai déjà essayé ce qui suit.

1.) L'importer dans GRASS en utilisant v.in.ogrceci a échoué avec le message d'erreur: ERREUR: G_realloc: impossible d'allouer 498240036 octets à break_polygons.c: 188

2.) Ma deuxième idée était d'utiliser PostGIS. Importez le fichier de formes, rééchantillonnez-le à l'emplacement x, y de la grille, puis exportez ces points et créez une grille à partir de xyz. J'ai importé avec succès les fichiers de formes (polygones et points) mais le croisement d'un million de polygones avec 300 000 points semble être très lent. J'ai utilisé le satement PostGIS suivant, peut-être qu'il y a place à amélioration.

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

3.) J'ai également essayé d'utiliser simplify()PostGIS. Mais j'ai perdu de nombreux petits polygones (c'est-à-dire que certaines zones qui n'étaient couvertes que de petits polygones sont devenues nulles).

Toutes les idées seraient grandement appréciées.

johannes
la source
1
Quelle version de GRASS avez-vous utilisée? Elle devrait être au moins de 6,4. Notez que dans GRASS 7, la prise en charge des fichiers volumineux est également implémentée pour les cartes vectorielles, ce qui devrait aider à surmonter le problème indiqué (il est également beaucoup plus rapide).
markusN
J'utilise actuellement GRASS 6.4. Je mettrai à jour à 7 bientôt, merci pour l'astuce.
johannes
Vous pouvez obtenir les derniers binaires winGRASS 7 précompilés ici: wingrass.fsv.cvut.cz/grass70
markusN

Réponses:

14

Vous pouvez essayer gdal_rasterize , bien que je ne l' aie pas utilisé avec un fichier de formes aussi volumineux, vous pouvez donc avoir les mêmes problèmes que vous l'avez fait avec GRASS. Je pense que quelque chose comme ce qui suit devrait fonctionner (avec 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

Bien sûr, vous devrez jouer avec certaines des options en fonction de votre fichier de formes source. Le paramètre le plus important est -tr qui spécifie la résolution d'un pixel; sans cela, vous pouvez vous retrouver avec un très grand raster ...

Si vous souhaitez vous en tenir à GRASS, essayez de définir une plus petite étendue pour la pixellisation, et divisez le processus en morceaux gérables, puis mosaïquez les rasters en un seul.

MerseyViking
la source
1
gdal rasterize a tout fait en 5 min environ :). Merci beaucoup pour ça!
johannes
Cool! Je suis content que ça ait marché.
MerseyViking
3

En ce qui concerne votre première intention, pourriez-vous essayer d'exécuter la commande v.in.ogr sur une machine ayant plus de RAM ou d'espace disque swap?

Sinon, vous pouvez le diviser en plusieurs fichiers et pixelliser chacun d'entre eux avant de les fusionner à nouveau.

simo
la source
1

Si vous avez besoin de plus de contrôle lors de la pixellisation, consultez le script poly_density.py de perrygeo qui utilise GDAL sous le capot, mais peut être utilisé pour chevaucher des entités ou ajouter des évaluations conditionnelles au-delà de celles possibles avec gdal_rasterizeseul.

scw
la source
0

Comme Jack l'Éventreur, faites-le par parties. À partir des tranches d'exportation postgis des données, importez dans l'herbe et convertissez.

Pablo
la source