Saya memiliki file GeoJson 7GB yang ingin saya muat ke dalam database PostGIS. Saya sudah mencoba menggunakan ogr2ogr tetapi gagal karena file terlalu besar untuk ogr2ogr dimuat ke dalam memori dan kemudian proses.
Apakah ada alternatif lain untuk memuat file geojson ini ke PostGIS?
Kesalahan ogr2ogr yang saya dapatkan adalah:
GALAT 2: CPLMalloc (): Kehabisan memori yang dialokasikan -611145182 byte. Aplikasi ini telah meminta Runtime untuk menghentikannya dengan cara yang tidak biasa. Silakan hubungi tim dukungan aplikasi untuk informasi lebih lanjut.
Jawaban:
Sampel yang Anda kirim menunjukkan bahwa dimungkinkan untuk membagi file secara manual menggunakan editor seperti notepad ++
1) Untuk setiap chunk buat header:
2) Setelah tajuk menempatkan banyak fitur:
3) Selesai potongan dengan:
EDIT - Ini adalah kode python yang akan membagi file menjadi beberapa ukuran yang ditentukan (dalam sejumlah fitur):
sumber
Sayangnya JSON, seperti halnya XML, sangat tidak cocok untuk pemrosesan aliran sehingga hampir semua implementasi mengharuskan seluruh dataset dimuat dalam memori. Meskipun ini ok untuk set kecil dalam kasus Anda, tidak ada pilihan lain selain memecah dataset menjadi potongan yang lebih kecil dan dapat dikelola.
Memperbaiki solusi Pablo, berikut ini salah satu yang tidak mengharuskan Anda untuk benar-benar membuka dan memuat file ke dalam editor dan dibagi dengan tangan tetapi mencoba untuk mengotomatisasi sebanyak mungkin seluruh proses.
Salin file json ke host Unix (linux, osx) atau instal alat cygwin di Windows. Kemudian buka shell dan gunakan vim untuk menghapus baris pertama dan terakhir dari file:
ketik dd untuk menghapus baris pertama, lalu SHIFT-G untuk memindahkan akhir file, ketik dd lagi untuk menghapus baris terakhir. Sekarang ketik : wq untuk menyimpan perubahan. Ini harus paling lama hanya beberapa menit.
Sekarang kita akan memanfaatkan kekuatan unix untuk membagi file menjadi potongan yang lebih mudah dikelola. Dalam jenis shell:
Pergi minum bir. Ini akan membagi file menjadi banyak file yang lebih kecil, masing-masing berisi 10.000 baris. Anda dapat menambah jumlah garis, asalkan Anda cukup kecil sehingga ogr2gr dapat mengelolanya.
Sekarang kita akan menempelkan kepala dan ekor ke masing-masing file:
Pergi ambil seekor ular. Dua perintah pertama cukup membuat file header dan footer dengan konten yang benar (hanya untuk kenyamanan benar-benar), sedangkan yang terakhir akan menambahkan header dan footer ke setiap potongan yang kita pisah di atas dan menghapus potongan tanpa header / tanpa footer (untuk menghemat ruang ).
Pada titik ini semoga Anda dapat memproses banyak tempat-potongan - *. File json dengan ogr2ogr:
sumber
sed -i "1d" places.json
Hapus 4 baris pertama:sed -i "1,4d" places.json
Hapus 4 baris terakhir:head -n -4 places.json > places2.json
Dimungkinkan untuk memuat data Anda dengan FME Desktop. Sangat mudah.
sumber
Seharusnya lurus ke depan untuk menulis pembaca dan penulis malas dengan Python yang akan mengubah file geojson Anda ke format shapefile yang jauh lebih kecil atau langsung ke SQL tanpa melakukan semuanya dalam memori. Setelah dikonversi, alat PostGIS asli dapat mengimpor set data besar. Dukungan geojson di OGR relatif baru dan tidak ada bendera untuk menangani file besar.
Jika Anda entah bagaimana dapat berbagi file yang dapat dikelola, saya dapat membantu Anda.
sumber
Ini telah meningkat di GDAL 2.3.0 https://trac.osgeo.org/gdal/wiki/Release/2.3.0-Berbaru sekarang ini jauh lebih efisien dalam membaca file GeoJSON yang besar.
sumber