我正在编写一个需要绘制由许多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);
先谢谢,希望我已经解释得很好。
答案 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()
。