在PostGIS中找不到ST_Extrude函数

时间:2017-05-03 09:45:18

标签: postgresql postgis

我尝试在PostgreSQL(v9.5.6)+ PostGIS(v2.3.2)数据库上运行以下脚本:

DO $$
DECLARE
    runway_area varchar;
    runway_area_transformed varchar;
BEGIN
    -- calculate runway area from centerline + width + strip --> buffer comes in handy here
    SELECT ST_Translate(
            ST_Force3D(
                ST_Buffer(
                    ST_GeomFromText(
                        'LINESTRING(16.553 48.122, 16.575 48.109)'
                    ),
                    0.0006,
                    'endcap=square'
                )
            ),
            0,
            0,
            180
        )
    INTO runway_area;
    RAISE NOTICE 'RUNWAY AREA: %', ST_AsGeoJSON(runway_area);

    SELECT ST_Extrude(ST_GeomFromText(ST_AsText(runway_area)), 0,0,50)
    INTO runway_area_transformed;
    RAISE NOTICE 'RUNWAY AREA TRANSFORMED: %', ST_AsGeoJSON(runway_area_transformed);
END
$$ LANGUAGE plpgsql;

然后我收到以下错误:

ERROR:  function st_extrude(geometry, integer, integer, integer) does not exist
LINE 1: SELECT ST_Extrude(ST_GeomFromText(ST_AsText(runway_area)), 0...
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
QUERY:  SELECT ST_Extrude(ST_GeomFromText(ST_AsText(runway_area)), 0,0,50)
CONTEXT:  PL/pgSQL function inline_code_block line 24 at SQL statement
********** Error **********

ERROR: function st_extrude(geometry, integer, integer, integer) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Context: PL/pgSQL function inline_code_block line 24 at SQL statement

我很快发现函数st_extrude(geometry, integer, integer, integer)在我的数据库中不存在(我试图在Schemas> public> Functions中查找它,但它不存在)。

然后我根据这个(https://hub.docker.com/r/mdillon/postgis/)图像(Postgres 9上的一些PostGIS 2.3)启动了一个Docker容器,但我也找不到它的功能。

从PostGIS文档中可以看出,ST_Extrude函数应该从v2.1.0开始可用(参见https://postgis.net/docs/ST_Extrude.html)。我在这里错过了一些非常基本的问题,为什么我在设置中没有这个功能?

1 个答案:

答案 0 :(得分:2)

所以我弄清楚问题是什么:我错过了postgis_sfcgal扩展名。我运行CREATE EXTENSION postgis_sfcgal;并在我的数据库中成功安装了扩展程序。然后我就可以运行上面的脚本了!