在Android地图视图上绘制路径,需要使用大量的经纬度坐标点。

3
我正在编写一个需要绘制由许多GPS点(经度+纬度)组成的“路线”的应用程序。这些点是靠近一起的,不沿着道路行驶,简单地在每个点之间画一条直线是理想的。
我目前的实现非常缓慢,因为我正在循环遍历所有GPS坐标,并在itemized overlay中创建新的Point和overlay item。这需要大约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个回答

3

请查看我的包含代码示例的回复:

如何使用kml文件在地图上绘制路径?

这个示例解析了kml文件(谷歌地图或谷歌地球提供的用于计算路线的xml格式),并将地理点绘制到地图上。如果您已经有一系列地理点,您只需查看drawPath()方法,并调整传递给它的地理坐标参数的方式(我将其封装成一个简单的名为NavigationDataSet的bean)。


谢谢,我花了一些时间修改,但最终成功了,谢谢。 - stealthcopter

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对象;它们可以被重复使用。
另外需要注意的是,您似乎正在使用addOverlay(),就像在Hello, MapView demo中演示的那样。唯一的问题是每次添加一个项目时都会调用populate();如果您要添加很多点,则最好一次添加很多覆盖层,然后在最后调用populate()

不幸的是,我无法选择两个答案都正确,但这些信息对我也很有帮助,谢谢 :) - stealthcopter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接