2011-10-27 37 views
2

我需要返回一組從數據庫中篩選記錄其座標是當前的地圖範圍內的範圍內的座標(map.getBounds())負荷數據庫是地圖上的

根據谷歌地圖API v3可以使用api和函數「containsLatLng(latlng:GLatLng)」來做客戶端,但是我想在服務器端執行這個實現,然後返回這個座標中的記錄。

如果地圖以非洲爲中心,我目前的實施情況是有效的,但如果地圖以相同的視角顯示中國和加拿大,那麼我的實施不起作用,因爲太平洋的經度從積極變爲消極。

關於如何準確實現這一點的任何建議?

+0

這不是一個專家,所以我寧願評論而不是回答,是經度從積極轉變爲太平洋地區負值?然後,這將拋出界限。 –

+0

@RobHaupt。確切地說,這基本上是問題!我將使用Polyline來查看它是否實際上拋出了界限。 –

回答

3

在Google Maps中,LatLngBounds對象構造函數獲取矩形邊界的西南角和東北角。

知道一點是西南角而不是東南角對解決問題至關重要。

如果你知道一點是西南角,另一點是東北角,那麼比較兩個角的經度。你的算法會像這樣:

  • 如果西南角的經度是比東北角的經度,不是一個點的範圍內,如果有這兩個經度和之間的經度兩個角落之間的緯度。 (這可能是你所做的一切,這就是爲什麼它在條件屬實的非洲工作的原因,但不是在太平洋範圍內的東西)

  • 如果西南角的經度是更多比東北角的經度,比你的界限穿越0經度,你需要扭轉的條件:一個點是在界限內,如果它的經度是而不是數字之間的西南角經度和經度東北角。

爲簡單起見,因爲它幾乎肯定是真的,我假設你永遠不會有一個覆蓋北極或南極的界限。 (在谷歌地圖,我甚至不知道你是否可以有這樣的界限。)