gpt4 book ai didi

MySQL ST_Contains 结果错误

转载 作者:可可西里 更新时间:2023-11-01 08:47:14 25 4
gpt4 key购买 nike

我正在使用 MySQL ST_Contains 来查明一个区域是否包含在另一个区域中。因此我有一个这样的表:

CREATE TABLE tablex (id int, geoPoly MULTIPOLYGON NOT NULL, SPATIAL INDEX(geoPoly))

为了找出某个区域包含哪些区域,我使用以下查询:

SELECT b.* FROM tablex as a 
LEFT JOIN tablex as b ON ST_CONTAINS(b.geoPoly, a.geoPoly)
WHERE a.intID = 123

这适用于大多数情况,但在一种特殊情况下会给出错误的答案:

我从 openstreetmaps 复制了奥地利布雷根茨和梅劳地区的地理坐标。 Mellau 包含在布雷根茨。但是上面的查询说 Mellau 包含但不在 Bregenz 中(这根本不是真的)。两种形状都使用相同的“方式”作为左侧和右侧的共同边界 Bregenz 比 Mellau 大得多

在 map 上看: http://www.openstreetmap.org/relation/74231对比 http://www.openstreetmap.org/relation/75097

不幸的是我不能在这里发布我的坐标数据(stackoverflow 只允许发布 30.000 个字符)。所以问题是:我怎样才能找出 为什么 mysql 说它不包括在内?

提前致谢!

最佳答案

您可以使用非常小的距离(0.0000001)(但不要太小,小心)的 ST_Buffer,它会起作用。一个例子:

SELECT st_within(g1.shape, ST_buffer(geometrycollection(g1.shape, g2.shape), 0.0000001))
FROM (SELECT * FROM geoflas WHERE id = 1) as g1,
(SELECT * FROM geoflas WHERE id = 2) as g2;

关于MySQL ST_Contains 结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25182846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com