2010-03-26 66 views
0

我正在爲我的Uni上的課程製作類似谷歌地圖的應用程序(不是複雜的,它應該加載城市的地圖,而不是整個世界)。地圖可以有很多圖層,包括標記(餐館,醫院等) 問題是,當你有很多點時,縮小地圖看起來不正確。在這個縮放級別,只有一些點需要可見(並且在最大地圖尺寸,所有點)。 問題是:如何確定在指定的縮放級別應該可見哪些點?確定基於變焦的地圖上應顯示哪些點的算法

因爲我已經實現了PR Quadtree來加速渲染,我認爲我可以定義一些「高優先級」標記(它總是可見的,在地圖編輯器中定義)並將它們放入隊列中。在每個步驟中,標記將從隊列中移除,並且所有鄰居的距離至少爲D單位(D取決於縮放級別)被選中並插入隊列中,依此類推。 有沒有比我想到的算法更好的方法?

在此先感謝!

回答

1

我有一個類似的問題,你不能避免有重疊的圖標,無論用什麼方法將一些圖標標記爲高優先級。

我做了什麼(在你的情況下應用可能並不容易 - 在我的情況下,地圖是在桌面應用程序中渲染的,在渲染過程之上有更多的控制權)是基於優先級進行排序的,不重疊的標記 - 也顯示消息,如「刪除XXX重疊標記」。這樣用戶就不會被信息淹沒,他仍然可以看到最重要的信息。

我希望這會有所幫助。

0

不確定我完全理解,但也許可以基於從每個點到其最近鄰居的平均距離的倒數,爲每個圖層分配一個「鄰域密度」。對於特定的縮放級別,您可以計算可以舒適地查看的最大密度並將其用作閾值。

0

我從零開始設計地圖應用程序時有一些經驗我建議您將整個世界分成16個縮放級別。縮放級別0應顯示整個世界,縮放級別15應顯示街道數據。

通常情況下,您將不得不使用縮放級別0到3來具有各國的邊界。並且每個縮放級別應具有前一個縮放範圍的1/4的縮放範圍。您可以對錶格圖進行縮放(假設您正在使用數據庫來存儲空間相關數據)。一旦將縮放級別和縮放級別的範圍定義爲表映射,就可以更好地控制查詢數據。並建議爲您的地圖數據構建一個R-Tree索引。

每次你得到一個圖層/表格(假設一個圖層可以是國家邊界,鐵路軌道或街道),建議您自己定義縮放級別,而不是花時間查找算法層數不會很大。

我可以繼續前進,但如果你想要特定的答案,我也可以解決它們。

相關問題