输入几何体具有未知(0)SRID

2024-09-28 21:55:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的帖子中,我提出了一些问题,效果很好。但是,当我添加执行坐标转换的行和查询geom的行时,我在运行web服务时收到以下错误:

Input geometry has unknown (0) SRID

我是波斯吉斯的新手。如何解决此问题

代码:

query = """  WITH data AS (
        SELECT '{featuresArray}'::json AS featuresCollection
        )
        SELECT gid,geom,type::text,properties::text,
        array_to_string(array_agg(x_4326||' '||y_4326 ORDER BY gid),',') AS g4326,
        array_to_string(array_agg(x_25832||' '||y_25832 ORDER BY gid),',') AS g25832             
        FROM (
        SELECT
        ROW_NUMBER() OVER () AS gid,
        ST_AsText(ST_GeomFromGeoJSON(feature->>'geometry')) AS geom,
        feature->>'type' AS type,
        feature->>'properties' AS properties,
        ST_X((ST_DumpPoints((ST_GeomFromGeoJSON(feature->>'geometry')))).geom) x_4326,       
        ST_Y((ST_DumpPoints((ST_GeomFromGeoJSON(feature->>'geometry')))).geom) y_4326,  
        ST_X((ST_DumpPoints((ST_Transform(ST_GeomFromGeoJSON(feature->>'geometry'),25832)))).geom) x_25832,       
        ST_X((ST_DumpPoints((ST_Transform(ST_GeomFromGeoJSON(feature->>'geometry'),25832)))).geom) y_25832

        FROM (SELECT json_array_elements(featuresCollection->'features') AS feature FROM data) AS f) j
        GROUP BY gid,type::text,properties::text,geom
        ORDER BY gid;""".format(featuresArray=featuresArray)

Tags: textbyastypepropertiesarrayselectfeature
1条回答
网友
1楼 · 发布于 2024-09-28 21:55:27

一些PostGIS功能依赖于SRS,例如^{}。必须指定要从哪个SRS进行转换,否则转换脚本没有用于计算新坐标的引用,例如从EPSG:25832EPSG:4326

SELECT ST_Transform('SRID=25832;POINT(1 1)',4326);

。。否则将引发异常

SELECT ST_Transform('POINT(1 1)',4326);   <  WKT literal without SRS
ERROR:  ST_Transform: Input geometry has unknown (0) SRID

使用^{}可以将SRS设置为几何图形,以防它们没有任何几何图形-如您的示例所示,例如

SELECT ST_Transform(
         ST_SetSRID('POINT(1 1)'::geometry,25832),
         4326);

同样的原则适用于CREATE TABLEINSERT/UPDATE语句。创建表时,我们声明SRS如下

CREATE TABLE t (geom geometry(point,4326));

。。因此PostGIS希望所有传入的几何体具有相同的SRS

INSERT INTO t VALUES ('SRID=4326;POINT(1 1)'); 

。。否则它也会引发一个例外

INSERT INTO t VALUES ('SRID=25832;POINT(1 1)'); 
ERROR:  Geometry SRID (25832) does not match column SRID (4326)

相关问题 更多 >