Adres noktalarının ulusal veri kümesi (37 milyon) ve MultiPolygonZ türü sel anahatlarının (2 milyon) çokgen veri kümesi var, bazı çokgenler çok karmaşık, maksimum ST_NPoints yaklaşık 200.000. Hangi adres noktaları taşkın poligon olan PostGIS (2.18) kullanarak tanımlamak ve bu adres kimliği ve sel riski ayrıntıları ile yeni bir tabloya yazmak çalışıyorum. Ben bir adres perspektifinden (ST_Within) denedim ama sonra sel alanı perspektif (ST_Contains) başlayarak bu takas, hiç sel riski olmayan geniş alanlar olması. Her iki veri kümesi de 4326 olarak yeniden projelendirildi ve her iki tabloda da uzamsal bir dizin var. Aşağıdaki sorgum 3 gündür çalışıyor ve yakında herhangi bir zamanda bitirme belirtisi göstermiyor!
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);
Bunu çalıştırmanın daha uygun bir yolu var mı? Ayrıca, bu türden uzun süren sorgular için, kaynak kullanımını ve pg_stat_activity'ye bakmak dışında ilerlemeyi izlemenin en iyi yolu nedir?
Benim orijinal sorgu 3 gün de olsa Tamam tamamlandı ve ben başka bir iş ile sidetracked var, bu yüzden çözüm denemek için zaman ayırmak zorunda asla. Ancak ben sadece bu ziyaret ve şimdiye kadar iyi öneriler yoluyla çalışma var. Aşağıdakileri kullandım:
- Burada önerilen ST_FishNet çözümünü kullanarak İngiltere üzerinde 50 km'lik bir ızgara oluşturdu
- Oluşturulan ızgaranın SRID'sini British National Grid'e ayarlayın ve üzerine bir uzamsal indeks oluşturdu.
- Şekil2pgsql bir Z dizini ekledi gibi taşkın verilerimi (MultiPolygon) ST_Intersection ve ST_Intersects kullanarak kırpılmış (sadece gotcha burada geo_ ST_Force_2D kullanmak zorundaydı
- Puan verilerimi aynı ızgarayı kullanarak kırptım
- Satırlarda dizinler ve tabloların her birinde sütun ve uzamsal dizin oluşturuldu
Senaryomu şimdi çalıştırmaya hazırım, tüm ülkeyi kaplayana kadar sonuçları yeni bir tabloya yerleştiren satır ve sütunlar üzerinde yinelenecek. Ama sadece taşkın verilerimi kontrol ettim ve en büyük çokgenlerin bazıları çeviri sırasında kayboldu! Bu benim sorgu:
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));
Orijinal verilerim şöyle:
Ancak yazı kırpma böyle görünüyor:
Bu, "eksik" bir çokgene örnektir: