使用KML有效地使用OSMBonusPack

时间:2016-05-13 17:44:23

标签: android kml osmdroid

我正在使用KML在地图上显示特定区域,您可以点击这些区域并获取一些信息。应用程序必须脱机工作,因此我在本地使用KML文件。

我现在的问题是当启用我的叠加显示KML区域时,应用程序的整体速度会降低,并且在某个缩放级别之后,多边形会变得太大而无法渲染。

我想得到一些一般性的提示,让我实现KML减少重量级和其他有关KML的OSMBonusPack的有用信息。

(示例:我注意到OSMDroid即使在我看不见的情况下也会渲染区域纹理,我不知道如何防止这样的事情。)

2 个答案:

答案 0 :(得分:1)

看起来你的问题是多边形渲染而不是KML处理。

首先应该尝试更改图层类型:

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

答案 1 :(得分:1)

尝试优化众多图形对象的显示是一个巨大的问题。 试图通用,这个领域有两种经典的解决方案:

1)在低缩放级别,我们有许多要显示的对象。但是,由于我们离它们很远,我们可以尝试简化它们。 典型解决方案:标记聚类,折线/多边形简化。

=&GT;标记聚类在OBP中可用,但在KML中默认不用于叠加转换。

=&GT; DouglasPeuckerReducer提供折线/多边形简化。

=&GT;根据缩放级别没有动态简化。如果您认为它可能会在您的上下文中带来改进,那么通过对多边形/折线进行子类化并调整绘制方法来实现它并不是一件大事。

2)在高缩放级别,我们接近一些物体。但是许多物体完全在视野之外。 典型解决方案:使用边界框快速检查,消除对象甚至对象组(假设它们已正确分组)。

=&GT;目前在osmdroid / OSMBonusPack中没有实现。可以通过修改的FolderOverlay,维护边界框属性以及使用draw方法对mapview边界框检查此边界框来完成实现。 仅当用户将此文件夹用于空间对象组(对象在空间上接近)时才有效 - 而不是对象的逻辑组。