【问题标题】:Access PostGIS Functions from plv8从 plv8 访问 PostGIS 函数
【发布时间】:2016-03-02 09:03:52
【问题描述】:

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

【问题讨论】:

    标签: postgresql postgis plv8


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

    【讨论】:

      【解决方案2】:

      首先你需要安装 Postgis 到 postgres

      http://postgis.net/install/

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

      【讨论】:

      • 谢谢你,我肯定已经在这个数据库中安装了 PostGIS。用截图更新了问题。
      • 看起来是 plv8 的问题。您是否尝试使用LANGUAGE plpgsql 创建相同的函数来测试一切是否正常?
      • 是的,我实际上是在尝试将现有的 plpgsql 函数转换为新的 plv8 函数。 plpgsql 函数工作正常,但我不清楚如何从 plv8 块内部访问 PostGIS 函数。
      • 我认为是扩展问题。但我会在这里留下我的答案,以防其他人有同样的想法。我也找到了这个,也许可以帮助stackoverflow.com/questions/30627205/…
      猜你喜欢
      • 2010-12-04
      • 1970-01-01
      • 2015-08-18
      • 2021-06-25
      • 2020-06-23
      • 1970-01-01
      • 2011-11-23
      • 2012-03-19
      • 2012-01-18
      相关资源
      最近更新 更多