【发布时间】:2021-03-01 01:41:56
【问题描述】:
所以我有一个包含超过 1700 行的大型选择查询,它基本上从与多边形表相交的各种表(一些点、一些线、它们之间的各种条件)中提取数据
select a.id
(select count(*) from pointtable2 b where st_contains(a.geom,b.geom ) )
(select sum(st_length(st_intersection(a.geometry, r.geometry))) from linetable3 b where st_intersects(a.geom,b.geom ) ),
(select a whole bunch of stuff from several other tables where multitude of conditions..)
from polygontable a
group by a.id, a.geom
特别是一个线层具有无效的几何图形,我最初通过添加 where 条件来处理这些几何图形
geometrytype(r.geom) <> 'MULTICURVE'::text AND st_isvalid(r.geom) is true
问题是,即使在这些条件下,我仍然收到以下错误
SQL Error [XX000]: ERROR: GEOSIntersects: IllegalArgumentException: RobustDeterminant encountered non-finite numbers
ERROR: GEOSIntersects: IllegalArgumentException: RobustDeterminant encountered non-finite numbers
ERROR: GEOSIntersects: IllegalArgumentException: RobustDeterminant encountered non-finite numbers
修复错误的几何图形将是长期解决方案,但迫切需要此报表视图,在忽略失败行的同时运行查询的最佳方法是什么?或者我如何能够发现哪些几何图形/哪些代码行失败了?
【问题讨论】:
-
嗨,您能否也发布导致错误的几何图形?
-
@JimJones 我不知道是哪些,这就是为什么我想知道如何识别它们
-
我明白了。您能告诉我们您使用的是哪个版本的 PostGIS 和 PostgreSQL?
-
@JimJones postgresql 11.0 postgis 2.5
-
我现在看到我有 postgis 3.0,而不是你的 2.5...而且我没有收到任何错误。您可以选择升级它吗?
标签: sql postgresql postgis intersection geos