【问题标题】:Drawing multi color PolyLines on Maps V2在 Maps V2 上绘制多色折线
【发布时间】:2014-03-06 20:28:30
【问题描述】:

我正在按以下方式在我的地图上绘制一条纯色折线,效果很好:

PolylineOptions polyLine = new PolylineOptions();  
polyLine.width(5);  
polyLine.color(Color.RED);  
polyLine.geodesic(true);  
for (int i = 0; i < speed.length; i++) {  
    polyLine.add(new LatLng(lat, lng));
}

map.addPolyline(polyLine);

现在我想在不同点之间绘制一条不同颜色的折线,具体取决于这两点之间的速度。

似乎没有一个简单的方法。

我指的是这个问题:draw polylines with different colors on v2 maps,我可以一个接一个地添加多个PolylineOptions,但我认为这不是一个有效的方法,因为我在一个简单的数据中有超过 2000 个点设置为绘图。

有更好的做法吗?

理想的实现方式是 Nike+ 应用如何在地图上绘制线条:

非常感谢任何帮助。

提前致谢!

【问题讨论】:

  • 您找到解决方案了吗?在效率方面遇到同样的问题,并且不会因为总是实例化新的 polylineoptions 而得到“断断续续”的折线
  • 不完全是。我们放弃了这个想法。只需重新查看我发布的上述示例,我认为他们正在使用 MapView 的 getPointOnScreen 之类的东西,然后在半透明视图之上使用 Path 或画布或其他东西绘制这样的形状 - 而不是在地图本身上
  • @M.Smith 地面和瓷砖叠加层非常强大。他们正确地跟随缩放和倾斜,所以它看起来像增强现实。它看起来非常整洁,我在我的应用程序中同时使用:用于渲染区域的地面叠加层(某种高度图)和用于上述线条绘制的自定义平铺叠加层。我为每个图块生成一个位图,然后返回new Tile(w,h,bitmap.compress(PNG))。线条需要瓷砖,因为如果它们在地面覆盖层上并且用户放大,它们看起来真的很奇怪。瓷砖连续性不是问题,我只是在边缘过度绘制了一点,Canvas 为我剪辑了它。跨度>
  • 虽然这是一个老问题,但你可能想看看我在 GitHub 上的项目:github.com/antoniocarlon/richmaps

标签: android android-mapview android-maps-v2


【解决方案1】:

我只是找到了一种使用 OptionsLines 的方法,实际上是两个 OptionsLines。 我将此函数与 gpx 文件一起使用,这就是为什么会有个人对象 TRKPT。

 int size = listPoints.size();
        PolylineOptions optline = new PolylineOptions();
        PolylineOptions optline2 = new PolylineOptions();
        optline.geodesic(true);
        optline.width(10);
        optline2.geodesic(true);
        optline2.width(10);
        for (int i = 0; i < size - 1; i++) {

            TRKPT pointD = listPoints.get(i);
            TRKPT pointA = listPoints.get(i + 1);
            int green = (int) ((float) 255 - (float) (i / (float) size) * (float) 255);
            int red = (int) ((float) 0 + (float) (i / (float) size) * (float) 255);

            optline.add(new LatLng(pointD.getLat(), pointD.getLon()), new LatLng(pointA.getLat(), pointA.getLon()));
            optline2.add(new LatLng(pointD.getLat(), pointD.getLon()), new LatLng(pointA.getLat(), pointA.getLon()));

            if(i%2 == 0){
                optline.color(Color.rgb(red, green, 0));
                mMap.addPolyline(optline);
                optline = new PolylineOptions();
                optline.geodesic(true);
                optline.width(10);
            }
            else{
                optline2.color(Color.rgb(red, green, 0));
                mMap.addPolyline(optline2);
                optline2 = new PolylineOptions();
                optline2.geodesic(true);
                optline2.width(10);
            }
        }

现在你有了一条从绿色到红色渐变的漂亮线条。

【讨论】:

  • 这不会创建真正的多色折线,而是创建大量具有不同颜色的单线段。你的点必须非常接近,以至于你最终得到一个很好的渐变。性能怎么样?我刚刚在地图上添加了约 1000 条折线,当我滚动/缩放时,它在 Galaxy S5 上的滞后非常糟糕。
  • 是的,很好的观察。表演不是很好,但对我来说已经足够了。这是我找到的唯一方法。如果您找到更好的方法,欢迎您;)
  • 是的,我找到了一个,如果你好奇的话:stackoverflow.com/questions/22235237/…
【解决方案2】:

您可以将任何您想要的内容渲染到Bitmap 并使用GroundOverlayTileOverlay

【讨论】:

  • 说实话,我从来没有听说过这两个,并且在探索时,它们看起来很有趣。谢谢!所以你的意思是说我应该继续用这些颜色创建位图,然后将它作为GroundOverlayTileOverlay 放在地图上?如有错误请指正
  • @SheikhAman 正是这样。我会在这里使用GroundOverlay,因为它有这个简单的setImage(...) 方法。
  • 为此我必须构建多个图像! :-/
  • @SheikhAman 不是。我会使用Bitmap 一个完整的行。您只需要仔细选择它的大小,这样放大后看起来会很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多