Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 从plv8访问PostGIS功能_Postgresql_Postgis_Plv8 - Fatal编程技术网

Postgresql 从plv8访问PostGIS功能

Postgresql 从plv8访问PostGIS功能,postgresql,postgis,plv8,Postgresql,Postgis,Plv8,我试图编写一个plv8函数,返回一个表示UTM区域值的整数。该函数使用PostGIS函数。以下是(不起作用的)想法: 当调用该函数时,我得到 错误:引用错误:未定义st_变换 如何从plv8内部访问这些PostGIS功能 编辑: PostGIS已在此数据库中安装并运行。 首先,您需要将Postgis安装到postgres 然后将postgis扩展添加到数据库中 以下是该函数的工作版本。在plv8中肯定有更好的方法来实现这一点 创建或替换函数utm_z(几何体) 将整数返回为 $$ var ge

我试图编写一个plv8函数,返回一个表示UTM区域值的整数。该函数使用PostGIS函数。以下是(不起作用的)想法:

当调用该函数时,我得到

错误:引用错误:未定义st_变换

如何从plv8内部访问这些PostGIS功能

编辑: PostGIS已在此数据库中安装并运行。
首先,您需要将Postgis安装到postgres

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


以下是该函数的工作版本。在plv8中肯定有更好的方法来实现这一点

创建或替换函数utm_z(几何体)
将整数返回为
$$
var geom_geog_wkt=
执行(“选择st_变换($1::geometry,4326);”,$1)[0];
var utm_区=
数学地板(
plv8.execute(
“选择(st_x($1::geometry)+180)/6+1作为“utm_z\”,geom_geog_wkt
)[0].utm_z
);
返回utm_区;
$$语言plv8


运行
plv8.execute()
返回一个对象数组。在上面的函数中,我获取第0个数组对象,然后使用键访问该对象的值,键是在语句中调用的第一个函数名。

谢谢,我已经在这个数据库中安装了PostGIS。更新了带有屏幕截图的问题。看起来是plv8的问题。您是否尝试使用
语言plpgsql
创建相同的函数来测试一切是否正常?是的,我实际上正在尝试将现有plpgsql函数转换为新的plv8函数。plpgsql函数工作正常,但我不清楚如何从plv8块内部访问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;