Ben raster2pgsql komut satırı aracını kullanarak PostGIS veritabanına yüklediğiniz DTED biçiminde rasters bir dizi var.
Rasterlerin her biri bir sıra halinde saklanır ve rid ve raster formatının bir değeri ile tanımlanır.
Şimdi, bir noktanın boylamını ve enlemini alan ve bu noktaya karşılık gelen piksel değerini döndüren bir veritabanı işlevi oluşturmak istiyorum.
Benim sorunum veritabanı Odroid tahtada çalıştığı için bunu yapmak için çok zaman alması (3-4 sn) olmasıdır.
İşlediğim veri kümesinin oldukça büyük olduğunu biliyorum (rasterler tüm İngiltere alanını kapsıyor), ancak PostgreSQL ve PostGIS'e çok aşina olmadığım için daha hızlı yapılabileceğinden şüpheleniyorum.
Şimdiye kadar yaptığım şey bu:
SELECT ST_Value(rast, ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326))
FROM (
SELECT * FROM rasters
WHERE rast && ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326)
) x;
$1
ve $2
sırasıyla uzun ve lat.
ST_SetSRID(ST_MakePoint($1, $2),4326)
Dize kesişmeleri yerine kullanmak , yeterli yineleme varsa size biraz zaman kazandırabilir.