【问题标题】:Create Postgis Table Column Type Geometry From Another Text Column In Same Table从同一表中的另一个文本列创建 Postgis 表列类型几何
【发布时间】:2020-10-15 21:29:23
【问题描述】:

我正在尝试了解如何在我遇到的情况下使用 Postgis。我有一个如下表:

location_name | geom | geography
-----------------------------------
loc_1         | 'MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))' | 
loc_2         | 'MULTIPOLYGON(((0 0,3 0,3 2,0 3,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))' | 
loc_3         | 'MULTIPOLYGON(((0 0,1 0,5 6,0 3,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))' | 
loc_4         | 'MULTIPOLYGON(((0 0,6 0,1 4,0 5,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))' | 
loc_5         | 'MULTIPOLYGON(((0 0,1 0,6 8,0 1,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))' | 

其中 location 是一个字符串,column geom 是 POSTGIS Polygon 或 Multipolygon 的文本表示,column geography 是一个空列类型的 geography。

我正在尝试使用 ST_GeomFromText 使用从 geom 字符串转换的地理类型元素填充地理列。我对 SQL 不是很好,到目前为止,我已经尝试了一些类似这样的命令,但没有奏效:

UPDATE table SET geography = ST_GeomFromText(geom);

是否可以使用相应 goem 列元素的地理类型版本填充地理列?

【问题讨论】:

  • 为我工作。你得到了什么错误?
  • 试试ST_GeogFromText。如果文本坐标是经纬度,则您显示的查询有效。如果它们位于投影坐标系中,则必须加载几何图形,设置 SRID,将 SRID 转换为 4326,然后转换为地理(尽管当前查询会给您一个警告,而不是错误)
  • 我使用上面的查询遇到了这个错误:ERROR: parse error - invalid geometry HINT: "" <-- parse error at position 1 within geometry
  • 这样您就可以先过滤掉空/空几何图形

标签: sql postgresql postgis polygon


【解决方案1】:

经过一番挖掘和测试,我能够找到答案。问题是文本几何列中有空字符串。添加地理列并根据文本列填充它的 SQL 命令如下所示:

ALTER TABLE table ADD geography GEOMETRY;
UPDATE table SET geography = ST_GeomFromText(geom) WHERE geom!='' AND geom IS NOT NULL;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2020-04-20
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2021-02-05
    相关资源
    最近更新 更多