Saya memiliki dataset nasional tentang titik alamat (37 juta) dan dataset poligon garis banjir (2 juta) tipe MultiPolygonZ, beberapa poligon sangat kompleks, maks ST_NPoints sekitar 200.000. Saya mencoba mengidentifikasi menggunakan PostGIS (2.18) yang titik alamatnya berada dalam poligon banjir dan menuliskannya ke tabel baru dengan id alamat dan perincian risiko banjir. Saya telah mencoba dari perspektif alamat (ST_Within) tetapi kemudian bertukar ini mulai dari perspektif area banjir (ST_Contains), alasannya adalah bahwa ada area besar tanpa risiko banjir sama sekali. Kedua set data telah diproyeksikan ke 4326 dan kedua tabel memiliki indeks spasial. Permintaan saya di bawah ini telah berjalan selama 3 hari sekarang dan tidak menunjukkan tanda-tanda akan selesai dalam waktu dekat!
select a.id, f.risk_factor_1, f.risk_factor_2, f.risk_factor_3
into gb.addresses_with_flood_risk
from gb.flood_risk_areas f, gb.addresses a
where ST_Contains(f.the_geom, a.the_geom);
Apakah ada cara yang lebih optimal untuk menjalankan ini? Juga, untuk pertanyaan jangka panjang dari jenis ini apa cara terbaik untuk memantau kemajuan selain dari melihat pemanfaatan sumber daya dan pg_stat_activity?
Permintaan awal saya selesai OK meskipun selama 3 hari dan saya teralihkan dengan pekerjaan lain sehingga saya tidak pernah mendedikasikan waktu untuk mencoba solusinya. Namun saya baru saja mengunjungi kembali ini dan bekerja melalui rekomendasi, sejauh ini bagus. Saya telah menggunakan yang berikut ini:
- Membuat kisi 50 km di atas Inggris menggunakan solusi ST_FishNet yang disarankan di sini
- Atur SRID dari grid yang dihasilkan ke British National Grid dan buat indeks spasial di atasnya
- Memotong data banjir saya (MultiPolygon) menggunakan ST_Intersection dan ST_Intersects (hanya Gotcha di sini adalah saya harus menggunakan ST_Force_2D pada geom karena shape2pgsql menambahkan indeks Z
- Memotong data titik saya menggunakan kisi yang sama
- Membuat indeks pada baris dan kolom dan indeks spasial pada masing-masing tabel
Saya siap menjalankan skrip saya sekarang, akan mengulangi baris dan kolom yang mengisi hasil ke dalam tabel baru sampai saya telah mencakup seluruh negara. Tetapi baru saja memeriksa data banjir saya dan beberapa poligon yang sangat besar tampaknya telah hilang dalam terjemahan! Ini permintaan saya:
SELECT g.row, g.col, f.gid, f.objectid, f.prob_4band, ST_Intersection(ST_Force_2D(f.geom), g.geom) AS geom
INTO rofrse.tmp_flood_risk_grid
FROM rofrse.raw_flood_risk f, rofrse.gb_grid g
WHERE (ST_Intersects(ST_Force_2D(f.geom), g.geom));
Data asli saya terlihat seperti ini:
Namun posting klipingnya terlihat seperti ini:
Ini adalah contoh dari poligon "hilang":