代码之家  ›  专栏  ›  技术社区  ›  stealthcopter

Android从大量经度/纬度点在地图视图上绘制路径

  •  3
  • stealthcopter  · 技术社区  · 14 年前

    我正在编写一个应用程序,需要绘制一个由许多GPS点(long+lat)组成的“路线”。这些点靠得很近,不会沿着道路行驶,只需在每个点之间画一条线就可以了。

    我目前的实现非常缓慢,因为我正在循环所有的GPS坐标,并在逐条叠加中创建一个新的点和叠加项。加载所有这些点并将其绘制到地图视图需要大约20秒。有没有一种方法可以从GPS坐标构建一系列线或点,并将它们绘制到地图视图上?

    当前实施示例:

     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 回复  |  直到 14 年前
        1
  •  3
  •   Community uzul    7 年前

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

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

    此示例解析一个kml文件(XML格式由Google地图或Google Earth提供,用于路由计算),并将地理点绘制到地图上。如果已经有一个地理点列表,您只需查看drawPath()方法;并调整将地理坐标参数传递给它的方式(我将其封装到一个名为navigationdataset的简单bean中)。

        2
  •  3
  •   Dan Lew    14 年前

    我不太清楚你在做什么,因为我不确定多佛利在这两个点之间是如何划分的。但我敢打赌,主要的问题是你使用的是一堆重叠项,如果完全跳过这部分并重写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的构造函数中创建绘画对象;它们可以根据需要重复使用。

    另外,作为旁注,您似乎正在使用 addOverlay() 如中所示 the Hello, MapView demo . 使用它的唯一问题是他们调用 populate() 每次添加一个项目时,如果要添加一组点,最好一次添加一组覆盖,然后调用 人口() 最后。