【问题标题】:ST_Area does not exist Heroku Postgresql + PostgisST_Area 不存在 Heroku Postgresql + Postgis
【发布时间】:2022-01-15 13:58:59
【问题描述】:

我在 Heroku 中有一个使用 Postgis 2.5 版数据库扩展的 Postgres。

我要使用该功能:

ST_Area( a_polygon )

具体来说,我想在我的表中生成一个列: alter table buildings add building_area float generated always as ( st_area( base_polygon ) ) stored;

其中base_polygon 的类型为polygon

但是,我收到此错误:

错误:函数 st_area(polygon) 不存在 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

在我运行CREATE EXTENSION postgis 之后这些命令不应该可用吗?

或者,我还有什么需要做的吗?

【问题讨论】:

    标签: sql postgresql heroku postgis heroku-postgres


    【解决方案1】:

    您的多边形列数据类型似乎是 polygon 中内置的 postgre 基础。

    ST_Area 需要 postgis geometry 类型作为参数。

    就像这个来自文档https://postgis.net/docs/ST_Area.html的例子一样

    select ST_Area(geom) sqft,
    ST_Area(ST_Transform(geom, 26986)) As sqm
    from (
         select
             'SRID=2249;POLYGON((743238 2967416,743238 2967450,
             743265 2967450,743265.625 2967416,743238 2967416))' :: geometry 
          geom
     ) subquery;
    

    检查这个例子是否有效,说明ST_Area函数存在。

    您可以添加具有 postgis 几何类型的列。 https://postgis.net/docs/AddGeometryColumn.html

    SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom',4326,'POLYGON',2);
    

    然后通过 postgis 函数将多边形转换为 postgis 格式。

    例如https://postgis.net/docs/ST_MakePolygon.html

    SELECT ST_MakePolygon( ST_GeomFromText('LINESTRING(75 29,77 29,77 29, 75 29)'));
    

    【讨论】:

    • 可以将polygon 直接转换为geometry(例如:select '((0,0),(0,10),(10,10),(10,0),(0,0))'::polygon::geometry;
    猜你喜欢
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多