[英]MySQL spatial query always empty
我使用空間索引將地理坐標存儲在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
-相同的空結果集。 我在這里想念什么?
我不是mysql GIS方面的專家,但在筆者看來,這些要點必須是緯度,經度。 我的信念是,在mysql 5.6 GIS數據類型中也是如此。
根據那個理論; 在您的查詢中,y和x應該切換
我發現了問題。 我的SQL查詢有錯誤。 它不會導致語法錯誤,但顯然不能正常工作。 更具體地說,我必須添加其他括號。 我不得不改變:
GeomFromText('POLYGON(40.800716 -73.958358, ...)')
至
GeomFromText('POLYGON((40.800716 -73.958358, ...))')
當我搜索示例時,我只是忽略了它。 而且我沒有收到任何語法錯誤,或者沒有任何幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.