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.


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.


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.


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.


0

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.