我使用空间索引将地理坐标存储在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)') );
我还尝试了INTERSECTS
,OVERLAPS
- 同样的空结果集。我在这里缺少什么?
答案 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, ...))')
当我搜索示例时,我只是忽略了它。并且我没有得到任何语法错误或者某些东西也没有帮助。