POSTGIS:错误:对混合 SRID 几何图形的操作。试图用两个不同的 SRIDS/表找到重叠的几何

Posted

技术标签:

【中文标题】POSTGIS:错误:对混合 SRID 几何图形的操作。试图用两个不同的 SRIDS/表找到重叠的几何【英文标题】:POSTGIS: ERROR: Operation on mixed SRID geometries. Trying to find overlapping geoms with two different SRIDS/tables 【发布时间】:2013-11-27 01:40:11 【问题描述】:

POSTGIS_VERSION=2.1;

我有两个具有两个不同 SRID 的表。我的目标是显示 TABLE_B 中的哪些几何图形与 TABLE_A 中的区域相交。

SELECT tablebname, a.geom FROM TABLE_B as a INNER JOIN (SELECT geom FROM TABLE_A WHERE tableAID = '00001') as b ON ST_Intersects(a.geom, b.geom);

我的表结构(截断)如下

TABLE_A 文本表格辅助 几何几何 (SRID=3577)

表_B 文本表出价 几何几何 (SRID=4326)

我尝试使用 ST_TRANSFORM(geom, 3577) 转换几何,但仍然收到相同的错误“错误:对混合 SRID 几何进行操作。”

使用以下命令select distinct(ST_SRID(geom)) as srid, count(*) from tableA group by srid;

我得到以下信息

srid | count
3566 | 2196
     |   18

我尝试将最后一个 18 更改为 3577 是徒劳的。每次我更新 SRID 时,它都会说它成功或没有找到任何 SRID 3577。

如有任何帮助,我们将不胜感激。我可以在需要时提供更多详细信息。谢谢。

【问题讨论】:

哪个版本的 PostGIS?没有 SRID 的 18 个计数可能为 NULL。 我在 Debian Stretch 下遇到了同样的问题,但是当我使用 psql -d"mydb" -c "SELECT ..." 从命令行运行时,它完美地显示了它在 pycopg2 中的问题.你能解决它吗? 抓紧我的记忆,如果我没记错的话,我可能只是将所有 NULL SRID 设置为 1 或将它们与其余数据的 SRID 匹配。 【参考方案1】:

没有子查询,更正表别名,并使用转换,这行得通吗?

SELECT b.*, a.*
FROM table_b AS b
INNER JOIN table_a AS a ON
  tableaid = '00001' AND ST_Intersects(ST_Transform(a.geom, 4326), b.geom);

还请注意,在您的原始查询中,您混淆了 TABLE_B as a,这可能解释了您尝试 ST_Transform 失败的原因,因为它没有转换预期的 a.geom 列。此外,没有这样的 PostGIS 9.1 版本,所以我猜你有 2.x。如果使用 typmods(例如,geometry(Polygon, 4326))进行设置,则它们不能有混合的 SRID。

【讨论】:

感谢 Mike,当 SQL 查询执行时,它不会返回任何匹配项。我知道我有重叠的区域,但是查询没有返回任何区域。你有可能的解释吗?谢谢。 您的 SQL 查询确实可以在同一张表上查找相邻(相交)区域。我确实需要跨表的相交区域。感谢您提供任何进一步的帮助。我会继续解决这个问题,并让你知道任何进展。 你的 SQL 是正确的,我在两个表上都使用了错误的 SRID。

以上是关于POSTGIS:错误:对混合 SRID 几何图形的操作。试图用两个不同的 SRIDS/表找到重叠的几何的主要内容,如果未能解决你的问题,请参考以下文章

Postgis经常使用函数

如何使用 GeoDjango/PostGIS 满足“enforce_srid_coordinate”约束?

Postgis 中 2 点之间的距离,单位为 srid 4326,以米为单位

常规笛卡尔坐标系的 PostGIS 空间参考 ID(SRID)?

使用 PostGIS 查找给定点的 n 个最近邻?

geodjango(postgis)中两个3D点之间的距离