2011-08-25 86 views
1

有關Google地圖和存儲/檢索座標的小問題。我在MySql上運行一個數據庫,我在兩個單獨的浮點字段中存儲經度/緯度點。我想執行查詢來查找適合給定谷歌地圖對象邊界的點。具有負經度條件的查詢數據庫

我從當前谷歌地圖獲取最小/最大lng/lat並通過PHP執行查詢。一切正常,除非我對經度有負值。這不返回任何結果,而值擬合最小/最大LNG存在...我的查詢看起來是這樣的:

SELECT * FROM points WHERE ((lng BETWEEN :lng_min AND :lng_max) AND (lat BETWEEN :lat_min AND :lat_max)) 

我檢查發送到存儲在數據庫中查詢/每單變量和每一個都是一個有效的浮動。這似乎沒有任何意義。我錯過了什麼嗎?

+0

冒號是什麼?你不能跳過它們嗎? – Gustav

+1

使用PDO?你的數據庫記錄查詢?我會檢查並確保正在運行的查詢是您所期望的。嘗試運行您認爲作爲查詢發送到數據庫的內容,並查看結果是否是您想要的。 –

回答

0

這裏的一個問題是在您的查詢中負值會導致問題。例如,如果lng_min < 0且lng_max> 0,那麼您應該像往常一樣檢索數據。然而,如果lng_min> 0(它可能發生,因爲地球是圓的並且從-180度到+180度的經度距離只有幾步之遙),那麼數據庫不檢索任何東西是有意義的價值觀。如果後者是這種情況,那麼您應該先查看是否對查詢中的所有經度進行了原點位移(例如(a + 180)%360),並且lng_min> 0並且lng_min> 0。在任何情況下,查詢失敗的lng_min/lng_max對的一些例子都會有幫助。