我需要查询多边形内的点,该多边形存储在不同的表中。下面的查询有效并完成工作:
SET @b := PolyFromText((SELECT AsText(boundaries.geometry)
FROM boundaries_users
LEFT JOIN boundaries
ON boundaries_users.boundary_id = boundaries.id
WHERE boundaries_users.boundary_name = 'name'));
SELECT
id,
addr_lon,
addr_lat,
ST_Contains(@b, POINT(addr_lat, addr_lon))
FROM buildings
WHERE ST_Contains(@b, POINT(addr_lon, addr_lat));
在这里,boundaries.geometry 的类型是 GEOMETRY。但是,我不明白为什么我必须将几何转换为文本并返回几何才能这样做。删除双重解析时,@b显示为一组奇怪的符号,并且ST_Contains为任何点返回 False。
MySQL 5.6
我的猜测是你正在连接多个几何图形,所以你的两个查询会生成不同的几何图形。
检查是否实际使用相同的几何图形:
SET @b := With double parsing and without parsing
然后看看AsText(@b)
生成什么。