我有一个空间表polygons
。我正在尝试有效地查找polygon
MySQLlat/lng point
空间表中的内容。
我知道ST_Within
可以使用,MySQL 5.6
但是我的版本早于这个版本,所以我将我可以使用的两个功能组合成比单独的更有效/更准确的东西。
这些是 MySQL 论坛帖子中的本机MBRWITHIN
函数和自定义GISWithin。MBRWITHIN 通常给我大约 2 行,一个点应该只有一个但很快,GISWithin 给出正确的行,但是很慢。
所以我正在尝试编写一个查询:
最初使用快速 MBRWITHIN 功能选择可能包含该点的几行。
然后使用较慢的 GISWithin 将此列表细化为单个正确的行,该 GISWithin 现在在大约 2 行而不是 9000 行上运行。
我尝试过各种子查询,例如
SET @x = -0.3578;
SET @y = 51.477;
SET @point = CONCAT('POINT(',@x,' ',@y,')');
SELECT * FROM
(SELECT `geometry` FROM world_borders WHERE MBRWITHIN( @point , `geometry` )) AS TT
WHERE GISWithin(GeomFromText(@point), `geometry`);
和
SELECT * FROM world_borders WHERE GISWithin(GeomFromText(@point), `geometry`) IN (SELECT ogr_fid FROM world_borders WHERE MBRWITHIN( @point , `geometry` ));
只是为了得到错误信息
#1416 - Cannot get geometry object from data you send to the GEOMETRY field
有谁知道我如何编写这样的查询或函数?
我的表中的多边形字段被调用geometry
并且是Geometry
从 ogr2ogr 导入的类型,供那些知道这一点的人使用。