Bazı raster / çokgen kavşakları yapmak için PostGIS2.0 kullanıyorum . Hangi işlemi kullanmam gerektiğini ve bunu gerçekleştirmenin en hızlı yolunun ne olduğunu anlamakta güçlük çekiyorum. Benim sorunum şöyle:
- Çokgenim ve rasterim var
- Çokgene düşen tüm pikselleri bulmak ve piksel değerinin toplamını almak istiyorum
- Ve (güncellenmiş sorun): Sorguyu gerçekleştirdiğimde orijinal taramada bulunmayan bazı pikseller için büyük değerler alıyorum
Ben kullanması gerekip gerekmediğini anlamakta güçlük yaşıyorum ST_Intersects()
ya ST_Intersection()
. Piksellerimi toplamak için en iyi yaklaşımın ne olduğunu da bilmiyorum. İşte denediğim ilk yaklaşım (# 1):
SELECT
r.rast
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
Bu rast
, ne yapacağımdan emin olmadığım bir değer listesi döndürür . Özet istatistiklerini kullanarak hesaplamayı denedim ST_SummaryStats()
ama bu çokgen içinde yatan tüm piksellerin ağırlıklı toplamı olup olmadığından emin değilim.
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
Denediğim diğer yaklaşım (# 2) ST_Intersection()
şunları kullanır :
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;
Bu, daha fazla analiz ettiğim geometrilerin bir listesini döndürür, ancak bunun daha az verimli olduğunu varsayıyorum.
Hangi operasyonun en hızlı sırası olduğu konusunda net değilim. Hep seçmeliyim raster, polygon
ya polygon, raster
, ya da böylece bir raster içine çokgen dönüştürmek raster, raster
?
EDIT: # 2 yaklaşımının R.K.
bağlantısından bazı ayrıntılarla güncelledim .
Yaklaşım # 2'yi kullanarak, çıktıda anlamadığım nedenin bir parçası olan sonuçlarda aşağıdaki hatayı fark ettim. İşte orijinal rasterimin görüntüsü ve kesişmek için kullanılan çokgenin bir taslağı, üstüne yerleştirilmiş:
Ve işte PostGIS kullanarak kesişimin sonucu:
Sonuçtaki sorun, orijinal rasterde olmayan 21474836 değerlerinin döndürülmesidir. Bunun neden olduğu hakkında hiçbir fikrim yok. Bunun bir yerlerde küçük sayılarla (neredeyse 0'a bölünerek) ilgili olduğundan şüpheleniyorum, ancak yanlış sonucu döndürüyor.
ST_SummaryStats()
# 1 için kullandım , ancak # 2 için nasıl yapılacağından emin değilim.