我有一组DTED格式的栅格,可以使用raster2pgsql命令行工具将其加载到PostGIS数据库中。
每个栅格都简单地存储在一行中,并由rid和一个栅格格式的值来描述。
现在,我想创建一个数据库函数,该函数接受点的经度和纬度,并返回与该点相对应的像素值。
我的问题是,由于数据库在Odroid板上工作,因此需要花费很多时间(3-4秒)。
我知道我处理的数据集很大(栅格覆盖了整个英国地区),但是由于我对PostgreSQL和PostGIS不太熟悉,我怀疑它可以更快地完成。
到目前为止,这是我所做的:
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
和$2
分别为long和lat。
2
导入到Postgis后,您是否将栅格切成瓷砖?(参数-t宽x高)?
—
mutolisp 2014年
是的,我做到了。它改善了性能。我可能还应该补充一点,该数据库位于Odroid板上,因此它的工作速度明显比台式PC慢。我只是想知道我是否可以以某种方式更改栅格处理方法,从而减少不必要的计算。例如,最初,我在所有栅格上调用ST_Value函数,然后寻找实际上包含某些值的行。这是最简单的方法,但工作起来却慢得多。
—
zedsdead 2014年
ST_SetSRID(ST_MakePoint($1, $2),4326)
如果有足够的迭代次数,则使用字符串concat代替您可以节省一些时间。
似乎没有什么帮助,但谢谢。我正在考虑在创建表时添加另一列,该列将仅包含单个栅格的边界框。也许这样可以更快地找到合适的栅格...另外,我想知道基于角坐标和lon / lat中像素步长对栅格中像素位置的预先计算是否可能会有所帮助...关于我将非常感激分享的想法:)
—
zedsdead 2014年
也许您可以尝试使用“解释”来检查瓶颈在哪里。
—
mutolisp 2014年