MySQL空间查询始终为空

时间:2015-10-21 02:32:15

标签: mysql sql gis geospatial spatial

我使用空间索引将地理坐标存储在MySQL表中。问题是我想知道元组/位置是否在边界框内的查询(由5个坐标描述的闭合多边形;首先是最后一个坐标是相同的)返回空结果。这是一个最低限的例子,对我不起作用:

CREATE TABLE osTest(
 loc Point NOT NULL
) ENGINE=MyISAM;

CREATE SPATIAL INDEX locIndex ON osTest(loc);

-- New York Central Park, The Great Lawn
INSERT INTO osTest (loc) VALUES (POINT(40.781343, -73.966598));

如果我执行下表扫描查询:

SELECT AsText(loc), X(loc), Y(loc) FROM osTest;

似乎一切正常 - 结果如下:

+-----------------------------+-----------+------------+
| AsText(loc)                 | X(loc)    | Y(loc)     |
+-----------------------------+-----------+------------+
| POINT(40.781343 -73.966598) | 40.781343 | -73.966598 |
+-----------------------------+-----------+------------+

但是,当我尝试执行使用空间索引的查询时,结果始终为空。后面的多边形中的多边形描述整个中央公园:

SELECT AsText(loc), X(loc), Y(loc) FROM osTest WHERE WITHIN(loc, GeomFromText('POLYGON(40.800716 -73.958358, 40.796858 -73.949120, 40.764216 -73.973153, 40.768108 -73.981929, 40.800716 -73.958358)') );

我还尝试了INTERSECTSOVERLAPS - 同样的空结果集。我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

我不是mysql GIS的专家,但在postgis中,积分必须是Latitude,Longitude。我的信念是,它在mysql 5.6 GIS数据类型中也是一样的。

根据该理论;在您的查询中,应切换y和x

答案 1 :(得分:0)

我发现了这个问题。我的SQL查询出错了。它不会导致语法错误,但显然它无法正常工作。更具体地说,我不得不添加额外的括号。我不得不改变:

GeomFromText('POLYGON(40.800716 -73.958358, ...)')

GeomFromText('POLYGON((40.800716 -73.958358, ...))')

当我搜索示例时,我只是忽略了它。并且我没有得到任何语法错误或者某些东西也没有帮助。