2015-10-21 52 views
0

我正在使用空間索引在MySQL表中存儲地理座標。問題是,我想知道元組/位置是否在邊界框內(由5個座標描述的閉合多邊形;首先最後一個座標相同)的查詢返回空結果。這裏的預期是不是爲我工作的最小例如:MySQL空間查詢始終爲空

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 - 同樣的查詢結果爲空。我在這裏錯過了什麼?

回答

0

我發現了這個問題。我在我的SQL查詢中出錯。它不會導致語法錯誤,但顯然它不能正常工作。更具體地說,我不得不添加額外的括號。我不得不改變:

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

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

我只是忽略了它,當我搜索的例子。而且我沒有得到任何語法錯誤,或者沒有任何幫助。

1

我不是mysql的專家,但在postgis中的點必須是緯度,經度。我的看法是,它在MySQL 5.6 GIS數據類型中也是一樣的。

根據該理論,在你的查詢中,y和x應該切換

+0

MySQL對於座標的「本質」是不可知的,即它不必是緯度或經度。這包括只要訂單一致,訂單就不重要。我現在發現了這個問題:我的SQL查詢中有一個錯誤。看我一眼。 – Christian