PostGIS:调用ST_MakeValid()时M维度出错

时间:2018-02-22 17:47:54

标签: postgresql postgis

我正在使用PostgreSQL 9.5和PostGIS 2.2。

我发现我的一些数据具有无效的几何形状,所以我试图纠正它。

UPDATE schema.table
SET geom = ST_MakeValid(geom) 
WHERE NOT ST_IsValid(geom);

但我有这个错误:

ERROR: Column has M dimension but geometry does not
État SQL :22023

我之前检查过几何图形的尺寸

SELECT count(gid), ST_Dimension(geom)
    FROM schema.table
    GROUP BY ST_Dimension(geom) ;

他们都只有2个维度。

那么有用的是:

UPDATE schema.table
    SET geom = ST_Force4D(ST_MakeValid(geom))
    WHERE NOT ST_IsValid(geom);

但我不知道为什么以及发生了什么......

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

列的类型实际上是3或4D几何。 您使用了错误的函数来测试坐标尺寸计数 你的几何形状。

St_Dimension为您提供几何的固有尺寸, Point为0,Lines为1,Polygons为2。

要获取维度数,您必须使用st_ndims。

参见文档:

这是一个用于说明差异的小问题:

extension String {
    static func direction<T>(_ value: T) -> String {
        switch value {
        case 0...11.24: return "N"
        case 11.25...33.74: return "NNE"
          ...
        default: return ""
        }
    }
}