Duży plik kształtu do rastra

13

Mam duży plik kształtu (1 gb) i muszę go zrasteryzować. Próbowałem już następujących.

1.) Zaimportuj go do GRASS przy użyciu v.in.ogrtego błędu nie powiodło się z komunikatem o błędzie: BŁĄD: G_realloc: nie można przydzielić 498240036 bajtów w break_polygons.c: 188

2.) Moim drugim pomysłem było użycie PostGIS. Zaimportuj plik kształtu, ponownie próbkuj go w miejscu x, y siatki, a następnie wyeksportuj te punkty i utwórz siatkę z xyz. Z powodzeniem zaimportowałem pliki kształtów (wielokąty i punkty), ale przecinanie 1 miliona wielokątów z 300 000 punktów wydaje się być bardzo wolne. Użyłem następującej satysfakcji PostGIS, być może jest miejsce na poprawę.

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

3.) Próbowałem także użyć simplify()w PostGIS. Ale straciłem wiele małych wielokątów (tzn. Niektóre obszary pokryte tylko małymi wielokątami stały się zerowe).

Wszelkie pomysły będą mile widziane.

Johnnes
źródło
1
Z jakiej wersji GRASS korzystałeś? Powinien wynosić co najmniej 6,4. Zauważ, że w GRASS 7 obsługa dużych plików jest zaimplementowana również dla map wektorowych, które powinny pomóc w przezwyciężeniu wskazanego problemu (również jest znacznie szybszy).
markusN
Obecnie używam GRASS 6.4. Niedługo zaktualizuję do 7, dziękuję za podpowiedź.
johannes
Najnowsze prekompilowane pliki binarne winGRASS 7 można pobrać tutaj: wingrass.fsv.cvut.cz/grass70
markusN

Odpowiedzi:

14

Możesz spróbować gdal_rasterize , chociaż nie użyłem go z tak dużym plikiem kształtu , więc możesz mieć takie same problemy jak z GRASS. Uważam, że coś takiego powinno działać (z 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

Oczywiście będziesz musiał pobawić się niektórymi opcjami w zależności od źródłowego pliku kształtu. Najważniejszym parametrem jest -tr, który określa rozdzielczość piksela; bez tego możesz mieć bardzo dużego rastra ...

Jeśli chcesz trzymać się GRASS, spróbuj ustawić mniejszy zasięg rasteryzacji i podziel proces na możliwe do zarządzania części, a następnie połącz rastry w jeden.

MerseyViking
źródło
1
gdal rasterize zrobił to wszystko w około 5 minut :). Wielkie dzięki za to!
johannes
Chłodny! Cieszę się, że zadziałało.
MerseyViking
3

Jeśli chodzi o twój pierwszy zamiar, czy mógłbyś spróbować uruchomić komendę v.in.ogr na maszynie posiadającej więcej pamięci RAM lub wymienić miejsce na dysku?

Jeśli nie, możesz podzielić go na wiele plików i zrasteryzować każdy z nich przed ponownym scaleniem.

simo
źródło
1

Jeśli potrzebujesz większej kontroli podczas rasteryzacji, sprawdź skrypt poly_density.py perrygeo, który używa GDAL pod maską, ale może być używany do nakładania się funkcji lub dodawania ocen warunkowych poza tymi, które są możliwe gdal_rasterizesame.

scw
źródło
0

Podobnie jak Kuba Rozpruwacz, rób to po części. Z postgis eksportuj plasterki danych importuj do trawy i konwertuj.

Pablo
źródło