ST_Area 不存在 Heroku Postgresql + Postgis
ST_Area does not exist Heroku Postgresql + Postgis
我在 Heroku 中使用 Postgis 2.5 版数据库扩展了 Postgres。
我要使用的功能:
ST_Area( a_polygon )
具体来说,我想要在 table 中生成一个列:
alter table buildings add building_area float generated always as ( st_area( base_polygon ) ) stored;
其中 base_polygon
的类型为 polygon
。
但是,我收到此错误:
错误:函数st_area(多边形)不存在提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
这些命令不是应该在我 运行 CREATE EXTENSION postgis
之后可用吗?
或者,我还需要做些什么吗?
您的多边形列数据类型似乎是内置于 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)'));
我在 Heroku 中使用 Postgis 2.5 版数据库扩展了 Postgres。
我要使用的功能:
ST_Area( a_polygon )
具体来说,我想要在 table 中生成一个列:
alter table buildings add building_area float generated always as ( st_area( base_polygon ) ) stored;
其中 base_polygon
的类型为 polygon
。
但是,我收到此错误:
错误:函数st_area(多边形)不存在提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
这些命令不是应该在我 运行 CREATE EXTENSION postgis
之后可用吗?
或者,我还需要做些什么吗?
您的多边形列数据类型似乎是内置于 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)'));