Saya menggunakan PostGIS2.0 untuk melakukan beberapa persimpangan raster / poligon. Saya mengalami kesulitan memahami operasi mana yang harus saya gunakan, dan apa cara tercepat untuk melakukan ini. Masalah saya adalah sebagai berikut:
- Saya punya poligon dan raster
- Saya ingin menemukan semua piksel yang termasuk dalam poligon, dan mendapatkan jumlah nilai piksel
- Dan (masalah yang diperbarui): Saya mendapatkan nilai besar untuk beberapa piksel yang tidak ada di raster asli ketika saya melakukan kueri
Saya mengalami kesulitan memahami apakah saya harus menggunakan ST_Intersects()
atau ST_Intersection()
. Saya juga tidak tahu apa pendekatan terbaik untuk menjumlahkan piksel saya. Inilah pendekatan pertama yang saya coba (# 1):
SELECT
r.rast
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
Ini mengembalikan daftar rast
nilai, yang saya tidak yakin apa yang harus dilakukan. Saya mencoba menghitung statistik ringkasan menggunakan ST_SummaryStats()
tetapi saya tidak yakin apakah ini adalah jumlah-tertimbang dari semua piksel yang ada di dalam poligon.
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
Pendekatan lain yang saya coba (# 2) menggunakan 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;
Ini mengembalikan daftar geometri yang saya analisis lebih lanjut, tetapi saya menganggap ini kurang efisien.
Saya tidak jelas yang mana urutan operasi tercepat juga. Haruskah saya selalu memilih raster, polygon
atau polygon, raster
, atau mengubah poligon menjadi raster sehingga itu raster, raster
?
EDIT: Saya memperbarui pendekatan # 2 dengan beberapa detail dari R.K.
tautan.
Menggunakan pendekatan # 2, saya telah memperhatikan kesalahan berikut dalam hasil yang merupakan bagian dari alasan mengapa saya tidak mengerti hasilnya. Ini adalah gambar raster asli saya, dan garis besar poligon yang digunakan untuk memotongnya, dilapis di atas:
Dan di sini adalah hasil persimpangan menggunakan PostGIS:
Masalah dengan hasilnya adalah bahwa ada nilai 21474836 yang dikembalikan, yang tidak ada di raster asli. Saya tidak tahu mengapa ini terjadi. Saya menduga itu terkait dengan angka kecil di suatu tempat (membaginya dengan hampir 0), tetapi mengembalikan hasil yang salah.
ST_SummaryStats()
untuk # 1, tetapi saya tidak yakin bagaimana melakukannya untuk # 2.