从plv8访问PostGIS功能

时间:2016-03-01 18:01:40

标签: postgresql postgis plv8

我正在尝试编写一个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已在此DB中安装并运行。 enter image description here

2 个答案:

答案 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)

首先你需要安装Postgis到postgres

http://postgis.net/install/

然后将postgis扩展名添加到您的数据库

enter image description here