1

我正在尝试编写一个 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 已安装并在此数据库中运行。 在此处输入图像描述

4

2 回答 2

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 个数组对象,然后使用键访问该对象的值,键是语句中调用的第一个函数名。

于 2016-03-02T01:03:52.170 回答
0

首先你需要安装 Postgis 到 postgres

http://postgis.net/install/

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

在此处输入图像描述

于 2016-03-01T18:09:48.880 回答