주소 포인트 (37 백만)의 국가 데이터 세트와 MultiPolygonZ 유형의 플러드 아웃 라인 (2 백만)의 다각형 데이터 세트가 있으며 일부 폴리곤은 매우 복잡하며 최대 ST_NPoints는 약 200,000입니다. 홍수 다각형에있는 주소 지점이 PostGIS (2.18)를 사용하여 식별하고 주소 ID 및 홍수 위험 세부 정보가있는 새 테이블에 기록하려고합니다. 주소 관점 (ST_Within)에서 시도했지만 홍수 지역 관점 (ST_Contains)에서 시작하여 이것을 대체했습니다. 이유는 홍수 위험이 전혀없는 넓은 지역이 있다는 이론적 근거입니다. 두 데이터 세트 모두 4326으로 재 투영되었으며 두 테이블 모두 공간 인덱스가 있습니다. 아래 쿼리가 3 일 동안 실행되었으며 조만간 완료 될 조짐이 없습니다!
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);
이것을 실행하는 더 최적의 방법이 있습니까? 또한이 유형의 장기 실행 쿼리의 경우 리소스 사용률 및 pg_stat_activity를 보는 것 외에 진행률을 모니터링하는 가장 좋은 방법은 무엇입니까?
내 원래의 쿼리는 3 일 동안 확인을 마쳤지만 다른 작업과 관련이 없어서 솔루션을 시험해 볼 시간을 결코 낭비하지 않았습니다. 그러나 나는 이것을 다시 방문하여 지금까지 권장 사항을 검토했습니다. 나는 다음을 사용했다.
- 여기에 제안 된 ST_FishNet 솔루션을 사용하여 영국에 50km 그리드를 생성했습니다.
- 생성 된 그리드의 SRID를 British National Grid로 설정하고 공간 인덱스를 빌드하십시오.
- ST_Intersection 및 ST_Intersects를 사용하여 내 홍수 데이터 (MultiPolygon)를 잘랐습니다 (shape2pgsql이 Z 색인을 추가함에 따라 기하에 ST_Force_2D를 사용해야했습니다)
- 동일한 그리드를 사용하여 내 포인트 데이터를 클리핑
- 행에 대한 색인 작성 및 각 테이블에 대한 공간 색인 및 공간 색인
이제 스크립트를 실행할 준비가되었습니다. 국가 전체를 다룰 때까지 결과를 채우는 행과 열을 새 테이블로 반복합니다. 그러나 방금 홍수 데이터를 확인했으며 가장 큰 다각형 중 일부가 번역에서 손실 된 것으로 보입니다! 이것은 내 쿼리입니다.
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));
내 원본 데이터는 다음과 같습니다.
그러나 포스트 클리핑은 다음과 같습니다.
다음은 "누락 된"다각형의 예입니다.