我正在尝试编写一个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功能?
答案 0 :(得分:1)
这是该功能的工作版本。当然,在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个数组对象,然后使用键访问该对象的值,该键是在语句中调用的第一个函数名。
答案 1 :(得分:0)