我正在尝试编写一个plv8函数,它返回一个表示UTM区域值的整数。该函数利用PostGIS函数。这是一个(不起作用的)想法:
CREATE OR REPLACE FUNCTION utm_z(geometry)
RETURNS integer AS
$$
var geom_geog = st_transform($1, 4326);
var utm_zone = Math.floor((st_x(geom_geog)+180)/6)+1;
return utm_zone;
$$ LANGUAGE plv8;当调用该函数时,我会得到
ERROR: ReferenceError: st_transform is not defined
如何从plv8内部访问这些PostGIS函数?
编辑: PostGIS已在此数据库中安装并正常运行。

发布于 2016-03-02 09:03:52
以下是该函数的工作版本。当然,在plv8中肯定有更好的方法来做到这一点……?
CREATE OR REPLACE FUNCTION utm_z(geometry) RETURNS integer AS $$ var geom_geog_wkt = plv8.execute("SELECT st_transform($1::geometry, 4326);", $1)[0].st_transform; var utm_zone = Math.floor( plv8.execute( "SELECT (st_x($1::geometry)+180)/6+1 AS \"utm_z\"", geom_geog_wkt )[0].utm_z ); return utm_zone; $$ LANGUAGE plv8;
运行plv8.execute()将返回一个对象数组。在上面的函数中,我获取第0个数组对象,然后使用键访问该对象的值,这是在语句中调用的第一个函数名。
发布于 2016-03-02 02:09:49
首先,您需要将Postgis安装到postgres
http://postgis.net/install/
然后将postgis扩展添加到您的数据库中。

https://stackoverflow.com/questions/35730075
复制相似问题