Android从大量经度/纬度点在mapView上绘制路径

时间:2010-08-02 12:48:18

标签: android gps android-mapview

我正在编写一个需要绘制由许多GPS点(长+纬度)组成的“路线”的应用程序。这些点靠近在一起,不遵循道路,只需在每个点之间划一条线即可。

我现在的实现非常慢,因为我循环遍历所有GPS坐标并在逐项覆盖中创建新的Point和overlayitem。这需要大约20秒才能加载所有这些点并将它们绘制到mapview。有没有办法可以构建一系列直线或从GPS坐标指向并将它们绘制到mapview上?

当前实施的示例:

 for each set of long+lats // removed to simplify
    point= new GeoPoint(latitude,longitude);
    overlayitem = new OverlayItem(point,"","");
    itemizedOverlay.addOverlay(overlayitem);
 mapOverlays.add(itemizedOverlay);
 mMapController.setCenter(point);

先谢谢,希望我已经解释得很好。

2 个答案:

答案 0 :(得分:3)

在此处使用代码示例检查我的回复:

How to draw a path on a map using kml file?

此示例解析kml文件(Google地图或Google地球提供的xml格式以进行路线计算),并将地理点绘制到地图上。如果您已经有一个地理点列表,您可以查看drawPath()方法;并调整将geo coords参数传递给它的方式(我将其封装到一个名为NavigationDataSet的简单bean中)。

答案 1 :(得分:3)

我并不完全清楚你在做什么,因为我不确定itemizedOverlay是如何在这些点之间绘制的。但我敢打赌,主要的问题是你使用一堆OverlayItems,只要完全跳过那部分并覆盖itemizedOverlay的draw()方法要快得多。我以前做过这个,它对于画线很有效。基本的伪代码是:

create List of GeoPoints
add List to ItemizedOverlay
add a dummy marker to ItemizedOverlay (so that it knows to call `draw()`)
in ItemizedOverlay.draw(), use mapView.getProjection() to map the array of GeoPoints to x,y coords
use Canvas.drawLines() to draw a line between all your points

由于速度是一个问题,请确保在ItemizedOverlay的构造函数中创建Paint对象;它们可以根据需要重复使用。

另外,作为附注,您似乎正在使用the Hello, MapView demo中所示的addOverlay()。使用它的唯一问题是每次添加项目时都会调用populate();如果你要添加一堆点,最好一次添加一堆叠加,然后在最后调用populate()