2011-03-19 158 views
1

假設我的當前點是lat = 50.000和long = 50.000,我想在這些位置顯示一些公交車站,但是我的限制應取決於縮放級別。取所有屏幕座標

到目前爲止,爲了這個目的,我找到了一個辦法:如果一個人可以把左上角和右下角的角落拉長,我會在這些位置之間找到電臺。

你知道我該如何對這種情況採取這些觀點或任何不同的想法?

在此先感謝..

回答

3

那麼你可以很容易地得到左上角和右下角的緯度/經度座標使用

GeoPoint tlGpt; // Top left 
GeoPoint brGpt; // Bottom right 

tlGpt = mapView.getProjection().fromPixels(0, 0); 
brGpt = mapView.getProjection().fromPixels(mapView.getWidth(), mapView.getHeight()); 

在任何縮放級別,你實際上可以看到地圖上的公交車站,然後頂左邊的經度可以被認爲與左下角的經度相同,左下角的長度也是大約右下角的長度。因此,您可以將邊界框視爲長方形,而不是等腰梯形(美式英語中的梯形)

+0

但是如何從頂部向左取整長度到底部|右邊/ – 2011-10-01 09:54:14

1

如果你只是想粗略衡量拿起對象的合理的樣品,然後經/緯的「距離」是不夠好。只要確保您將緯度範圍除以緯度的餘弦即可獲得經度範圍(即∆long = ∆lat/cos(lat))。這是爲了補償你接近極點時經線的收縮。您使用Δlat作爲基準,因爲緯線在地球上的任何地方都有相同的距離。

爲了更準確的衡量,有一些複雜的函數可以讓你計算從緯/長對的大圓距離,但從經濟上講,將緯度/長對轉換成3-D座標在概念上要容易得多,並且使用簡單的畢達哥拉斯距離來近似大圓距離。您可以使用2*r*acos(d/(2*r))(如果我的白板幾何形狀適合我),其中r是地球的名義半徑,以獲得確切的大圓。但是,如果您只想將對象放在一個範圍內,則可以將公式反轉以獲得等於大圓限制的畢達哥拉斯距離。這也可以用來派生一個三維邊界框來加速搜索。如果你的數據庫支持R樹,那麼你在笑! SQLite支持R * Trees,但是它們在默認版本中被禁用,所以我不知道它們是否可用於Android(似乎是it isn't)。

+0

Himm其實它對我來說有點複雜,但無論如何感謝。 – 2011-03-19 11:49:43