2016-05-13 34 views
1

我正在使用KML在地圖上顯示特定區域,您可以點擊該區域並獲取一些信息。應用程序必須離線工作,因此我在本地使用KML文件。使用KML有效使用OSMBonusPack

我的問題,現在是在表示KML區域覆蓋我的啓用,應用程序的整體運行速度降低,多邊形變得太大而呈現一定的縮放級別後。

我想獲得一些通用的技巧,使我實現KML少的ressource重和有關與KML OSMBonusPack其他有用的信息。

(例如:我注意到,OSMDroid呈現區域紋理,即使離開我的視線,我不知道如何來防止這樣的事情。)

+1

考慮從地圖視圖對象中刪除屏幕外的疊加層。同時減少多邊形中的點將有助於 – spy

回答

1

試圖優化衆多的圖形對象的顯示是一個巨大的問題。 試圖是通用的,在這方面有2個經典的解決方案:

1)在低縮放級別,我們有很多對象要顯示。但由於我們離他們很遠,我們可以嘗試簡化它們。典型解決方案:標記聚類,折線/多邊形簡化。

=>標記聚類可用在OBP,但在KML不使用默認疊加轉換。

=>折線/多邊形簡化是可用DouglasPeuckerReducer。

=>根據縮放級別沒有動態簡化。如果您認爲這可能會改善您的環境,那麼通過對多邊形/折線進行子分類並調整繪製方法來實現它並不是一件大事。

2)在高縮放水平下,我們接近一些物體。但是許多物體完全在視野外。 典型的解決方案:用邊界框快速檢查,以消除對象或對象組(假設它們已正確分組)。

=>在此不osmdroid/OSMBonusPack當前實施的。可以通過修改的FolderOverlay完成實現,保持邊界框屬性,並使用繪製方法在邊界框中檢查邊界框。 只有當用戶使用此文件夾作爲對象的空間組(對象在空間上接近)時纔會有效 - 不適用於邏輯組對象。

+0

謝謝你這個非常明確的答案,你和@ NikolaiDoronin的回答都很有幫助,但是你的問題完成了最好的問題,所以我給這個答案接受了答案。此外,如果您有任何可以幫助我製作KML覆蓋的資源較少或者只是更好地使用它,那麼我將非常感激。我仍然覺得我沒有100%使用它,但現在我的問題已經解決了。 –

1

它看起來像你的問題是多邊形渲染但不KML處理。

,你應該嘗試在改變層類型的第一件事:

<org.osmdroid.views.MapView 
     android:layerType="software" 
     android:id="@+id/mapView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
+0

將在星期一嘗試並提供反饋。與此同時,我看到這是一種標記語言,它是否在android-manifest? –

+1

不,可以在佈局中設置'layerType'屬性,像[this]一樣(https://github.com/lassana/osmdroid-shape-extension/blob/master/app/src/main/res/layout /activity_main.xml)。 –

+0

好吧,它解決了我的多邊形太大而無法在更高縮放級別渲染的問題。但是,即使滯後時間縮短了,仍然是我需要進一步調查的問題。 –