假設我的當前點是lat = 50.000和long = 50.000,我想在這些位置顯示一些公交車站,但是我的限制應取決於縮放級別。取所有屏幕座標
到目前爲止,爲了這個目的,我找到了一個辦法:如果一個人可以把左上角和右下角的角落拉長,我會在這些位置之間找到電臺。
你知道我該如何對這種情況採取這些觀點或任何不同的想法?
在此先感謝..
假設我的當前點是lat = 50.000和long = 50.000,我想在這些位置顯示一些公交車站,但是我的限制應取決於縮放級別。取所有屏幕座標
到目前爲止,爲了這個目的,我找到了一個辦法:如果一個人可以把左上角和右下角的角落拉長,我會在這些位置之間找到電臺。
你知道我該如何對這種情況採取這些觀點或任何不同的想法?
在此先感謝..
那麼你可以很容易地得到左上角和右下角的緯度/經度座標使用
GeoPoint tlGpt; // Top left
GeoPoint brGpt; // Bottom right
tlGpt = mapView.getProjection().fromPixels(0, 0);
brGpt = mapView.getProjection().fromPixels(mapView.getWidth(), mapView.getHeight());
在任何縮放級別,你實際上可以看到地圖上的公交車站,然後頂左邊的經度可以被認爲與左下角的經度相同,左下角的長度也是大約右下角的長度。因此,您可以將邊界框視爲長方形,而不是等腰梯形(美式英語中的梯形)
如果你只是想粗略衡量拿起對象的合理的樣品,然後經/緯的「距離」是不夠好。只要確保您將緯度範圍除以緯度的餘弦即可獲得經度範圍(即∆long = ∆lat/cos(lat)
)。這是爲了補償你接近極點時經線的收縮。您使用Δlat作爲基準,因爲緯線在地球上的任何地方都有相同的距離。
爲了更準確的衡量,有一些複雜的函數可以讓你計算從緯/長對的大圓距離,但從經濟上講,將緯度/長對轉換成3-D座標在概念上要容易得多,並且使用簡單的畢達哥拉斯距離來近似大圓距離。您可以使用2*r*acos(d/(2*r))
(如果我的白板幾何形狀適合我),其中r是地球的名義半徑,以獲得確切的大圓。但是,如果您只想將對象放在一個範圍內,則可以將公式反轉以獲得等於大圓限制的畢達哥拉斯距離。這也可以用來派生一個三維邊界框來加速搜索。如果你的數據庫支持R樹,那麼你在笑! SQLite支持R * Trees,但是它們在默認版本中被禁用,所以我不知道它們是否可用於Android(似乎是it isn't)。
Himm其實它對我來說有點複雜,但無論如何感謝。 – 2011-03-19 11:49:43
但是如何從頂部向左取整長度到底部|右邊/ – 2011-10-01 09:54:14