【问题标题】:Input geometry has unknown (0) SRID输入几何具有未知 (0) SRID
【发布时间】:2021-05-26 05:07:55
【问题描述】:

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

Input geometry has unknown (0) SRID

我是 Postgis 的新手。我该如何解决这个问题?

代码:

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)

【问题讨论】:

  • 您好。请添加CREATE TABLEUPDATE/INSERT 语句。
  • 嗨,我不做任何更新或仅插入选择
  • @JimJones 我解决了它..它现在可以工作了..谢谢你..你在上一个问题中发布的提示是必不可少且有用的
  • 为了完整起见,我也会在这里添加它作为答案
  • @JimJones 是的,当然。请做

标签: python postgresql postgis


【解决方案1】:

一些 PostGIS 功能依赖于 SRS,例如 ST_Transform。您必须指定要转换的 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

使用ST_SetSRID,您可以将 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)

【讨论】:

  • 谢谢,我认为为了这个问题,提到问题中的问题通过修改 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 为:ST_X((ST_DumpPoints(( ST_Transform(ST_SetSRID(ST_GeomFromGeoJSON(feature->>'geometry'),4326),25832)))).geom) x_25832, ST_Y((ST_DumpPoints((ST_Transform(ST_SetSRID(ST_GeomFromGeoJSON(feature->>'geometry'),4326 ),25832)))).geom) y_25832
  • @LetsamrIt 我只是添加了一个较短的代码 sn-p 以简化我的观点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 2011-03-02
  • 2015-10-27
  • 2014-03-31
  • 1970-01-01
相关资源
最近更新 更多