通过 OSMBonusPack 高效使用 KML

Using KML efficiently with OSMBonusPack

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

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

我想获得一些一般性提示,以减少我的 KML 实现所需的资源,以及有关使用 KML 的 OSMBonusPack 的其他有用信息。

(示例:我注意到 OSMDroid 即使在我看不见的地方也会渲染区域纹理,我不知道如何防止此类事情发生。)

您的问题似乎是多边形渲染,而不是 KML 处理。

您应该尝试的第一件事是更改图层类型:

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

尝试优化大量图形对象的显示是一个很大的问题。 尽量通用,这方面有2个经典解决方案:

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

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

=> polyline/polygon 简化可用于 DouglasPeuckerReducer。

=> 没有根据缩放级别进行动态简化。如果你认为它可能会在你的上下文中带来改进,那么通过子类化 polygon/polyline 并适配 draw 方法来实现它并不是什么大不了的事情。

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

=> osmdroid/OSMBonusPack 当前未实现此功能。可以通过修改后的 FolderOverlay 来完成实现,维护边界框属性,并使用绘制方法根据 mapview 边界框检查此边界框。 仅当用户将此文件夹用于对象的空间组(对象在空间上接近)而不是用于对象的逻辑组时,这才会有效。