Shapefile besar untuk raster

13

Saya memiliki shapefile besar (1 gb) dan harus merasternya. Saya sudah mencoba yang berikut ini.

1.) Impor ke GRASS menggunakan v.in.ogrgagal ini dengan pesan kesalahan: ERROR: G_realloc: tidak dapat mengalokasikan 498240036 byte di break_polygons.c: 188

2.) Ide kedua saya adalah menggunakan PostGIS. Impor shapefile, sampel ulang di lokasi x, y dari kisi dan kemudian ekspor titik ini dan buat kisi dari xyz. Saya berhasil mengimpor shapefile (poligon dan poin) tetapi memotong 1 juta poligon dengan 300k poin tampaknya sangat lambat. Saya menggunakan postGIS satement berikut, mungkin ada ruang untuk perbaikan.

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

3.) Saya juga mencoba menggunakan simplify()di PostGIS. Tetapi saya kehilangan banyak poligon kecil (yaitu beberapa area yang hanya ditutupi dengan poligon kecil menjadi nol).

Setiap ide akan sangat dihargai.

johannes
sumber
1
Versi GRASS mana yang Anda gunakan? Setidaknya harus 6,4. Perhatikan bahwa dalam GRASS 7 dukungan file besar diimplementasikan juga untuk peta vektor yang akan membantu mengatasi masalah yang ditunjukkan (juga jauh lebih cepat).
MarkusN
Saat ini saya menggunakan GRASS 6.4. Saya akan segera memperbarui ke 7, terima kasih atas petunjuknya.
johannes
Anda bisa mendapatkan binari winGRASS 7 terbaru yang telah dikompilasi di sini: wingrass.fsv.cvut.cz/grass70
markusN

Jawaban:

14

Anda dapat mencoba gdal_rasterize , walaupun saya belum menggunakannya dengan shapefile besar, jadi Anda mungkin memiliki masalah yang sama seperti yang Anda lakukan dengan GRASS. Saya rasa sesuatu seperti yang berikut ini akan berfungsi (dengan 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

Tentu saja, Anda harus bermain-main dengan beberapa opsi tergantung pada sumber bentuk Anda. Parameter paling penting adalah -tr yang menentukan resolusi piksel; tanpa itu, Anda mungkin menemukan diri Anda dengan raster yang sangat besar ...

Jika Anda ingin tetap menggunakan GRASS, coba atur tingkat yang lebih kecil untuk rasterisasi, dan bagi proses menjadi potongan-potongan yang dapat dikelola, kemudian buat mosaik raster menjadi satu.

MerseyViking
sumber
1
gdal rasterize melakukan semuanya dalam kira-kira 5 mnt :). Terima kasih banyak untuk itu!
johannes
Keren! Saya senang itu berhasil.
MerseyViking
3

Mengenai maksud pertama Anda, dapatkah Anda mencoba menjalankan perintah v.in.ogr pada mesin yang memiliki lebih banyak RAM atau menukar ruang disk?

Jika tidak, Anda dapat membaginya dalam banyak file dan rasterisasi masing-masing dari mereka sebelum menggabungkannya lagi.

simo
sumber
1

Jika Anda memerlukan kontrol lebih besar saat melakukan rasterisasi, lihat skrip pol_density.py perrygeo yang menggunakan GDAL di bawah tenda, tetapi dapat digunakan untuk fitur yang tumpang tindih atau menambahkan evaluasi kondisional di luar yang dimungkinkan dengan gdal_rasterizesendirian.

scw
sumber
0

Seperti Jack the Ripper, lakukan dengan bagian. Dari irisan ekspor postgis dari impor data di rumput dan konversi.

Pablo
sumber