Tôi đang sử dụng PostGIS2.0 để thực hiện một số giao lộ raster / đa giác. Tôi đang gặp khó khăn trong việc hiểu nên sử dụng thao tác nào và cách nhanh nhất để thực hiện việc này là gì. Vấn đề của tôi là như sau:
- Tôi có một đa giác và raster
- Tôi muốn tìm tất cả các pixel nằm trong đa giác và lấy tổng giá trị pixel
- Và (vấn đề được cập nhật): Tôi đang nhận được các giá trị lớn cho một số pixel không tồn tại trong raster ban đầu khi tôi thực hiện truy vấn
Tôi đang gặp khó khăn trong việc hiểu liệu tôi nên sử dụng ST_Intersects()
hay ST_Intersection()
. Tôi cũng không biết cách tiếp cận tốt nhất để tóm tắt pixel của mình là gì. Đây là cách tiếp cận đầu tiên mà tôi đã thử (# 1):
SELECT
r.rast
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
Điều này trả về một danh sách các rast
giá trị, mà tôi không biết phải làm gì với. Tôi đã thử tính toán thống kê tóm tắt bằng cách sử dụng ST_SummaryStats()
nhưng tôi không chắc đây có phải là tổng trọng số của tất cả các pixel nằm trong đa giác không.
SELECT
(result).count,
(result).sum
FROM (
SELECT
ST_SummaryStats(r.rast) As result
FROM
raster As r,
polygon As p
WHERE
ST_Intersects(r.rast, p.geom)
) As tmp
Cách tiếp cận khác mà tôi đã thử (# 2) sử dụng ST_Intersection()
:
SELECT
(gv).geom,
(gv).val
FROM
(
SELECT
ST_Intersection(r.rast, p.geom) AS gv
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
) as foo;
Điều này trả về một danh sách hình học mà tôi phân tích thêm, nhưng tôi cho rằng điều này là ít hiệu quả hơn.
Tôi không rõ đó là thứ tự hoạt động nhanh nhất cũng có. Tôi có nên luôn luôn chọn raster, polygon
hoặc polygon, raster
chuyển đổi đa giác thành raster raster, raster
không?
EDIT: Tôi đã cập nhật cách tiếp cận # 2 với một số chi tiết từ R.K.
liên kết của.
Sử dụng phương pháp # 2, tôi đã nhận thấy lỗi sau trong kết quả, đó là một phần lý do tại sao tôi không hiểu đầu ra. Đây là hình ảnh của raster ban đầu của tôi và một phác thảo của đa giác đang được sử dụng để giao với nó, được phủ lên trên:
Và đây là kết quả của giao lộ sử dụng PostGIS:
Vấn đề với kết quả là có các giá trị của 21474836 được trả về, không nằm trong raster gốc. Tôi không biết tại sao điều này lại xảy ra. Tôi nghi ngờ nó có liên quan đến số nhỏ ở đâu đó (chia cho gần 0), nhưng nó trả về kết quả sai.
ST_SummaryStats()
cho # 1, nhưng không chắc chắn làm thế nào cho # 2.