Sql 如何检测错误的几何图形

Sql 如何检测错误的几何图形,sql,postgresql,postgis,Sql,Postgresql,Postgis,用我的桌子 CREATE TABLE map.vzla_seg ( seg_id serial NOT NULL, link_id bigint, geom geometry(LineString), sentido integer, azimuth integer ) 如果我做这个查询 SELECT ST_GeometryType (geom), COUNT(*) FROM map.vzla_seg GROUP BY ST_GeometryType (geom) S

用我的桌子

CREATE TABLE map.vzla_seg
(
  seg_id serial NOT NULL,
  link_id bigint,
  geom geometry(LineString),
  sentido integer,
  azimuth integer
)
如果我做这个查询

SELECT ST_GeometryType  (geom), COUNT(*)
FROM map.vzla_seg
GROUP BY ST_GeometryType  (geom)
ST_GeometryType返回一个文本,因此我得到:

但如果我这样做了,我就会出错:

SELECT *
FROM map.vzla_seg
WHERE ST_GeometryType  (geom) <> 'ST_LineString'


ERROR:  Unknown geometry type: 0 - Unknown
********** Error **********

ERROR: Unknown geometry type: 0 - Unknown
SQL state: XX000
因此,函数如何在GROUP BY中正常工作,但在WHERE中不起作用

我试图得到错误的行来修复它。

只需从选择中删除几何图形即可


您的某些几何图形似乎缺少SRID或SRID无效

用这个

SELECT * 
FROM map.vzla_seg 
WHERE ST_GeometryType  (ST_SetSRID(geom,4326)) <>'ST_LineString'

我以4326为例。您应该使用自己的SRID

我认为这实际上并不能回答您的问题,也不能理解这在其他任何地方是如何有用的。@EvanCarroll问题在于SELECT*字段geom是SELECT的一部分,但失败了。移除geom允许查看坏行的id。我想知道它们是如何进入的,如果字段标记为geom,它们是什么。@EvanCarroll,我不知道。我创建了一个函数来从原始链接创建段。它们应该只是行字符串,只是发现了一些错误。。。经过一番挖掘,发现了那些古怪的几何结构。顺便说一句,我看了你的Facebook视频。我来自委内瑞拉,感谢分享。感谢并欢迎来到StackOverflow,你为我创建了一个帐户吗?嗨。非常感谢。不是特别的,但你的问题恰好是我回答的第一个问题:问题是如果你将geom作为SELECT的一部分,你仍然会得到一个错误。
SELECT * 
FROM map.vzla_seg 
WHERE ST_GeometryType  (ST_SetSRID(geom,4326)) <>'ST_LineString'