当前位置: 首页 > 知识库问答 >
问题:

谷歌地图Android系统上的折线每一个位置变化,新的折线或设定点?

姬博瀚
2023-03-14

在我的应用程序中,当我徒步旅行时,我会为每个位置的变化画一条折线。这可能是一个8小时的背包徒步旅行,所以我可能有数万个点的计划。

在我的测试中,我注意到当我放大到相当近的地方(比如17或18)时,即使在绘制了数千条线后,它也工作得很好,但当我缩小时,地图必须渲染所有这些线,它变得缓慢,因为我的手机试图处理所有事情。

我所知道的绘制折线的另一个选项是创建一个包含所有点(LatLng)的集合(ArrayList)并将其传递给绘制单线的折线的setPoints()方法。这显然在事后回顾跋涉时很有效,但我认为setPoints()的内部必须对添加的每一个新点进行循环,以绘制这条线,这最终可能会降低html" target="_blank">性能,因为无论旧点是否可见(在视区中),它都必须这样做。

中间有什么事吗?polyline.addpoint()方法是完美的,但我找不到类似的方法······现在作为一个权宜之计,我刚刚使我的折线可见性可切换,这样我就可以在我放大远和需要移动地图时隐藏它们,正如我所说的,当我拉近时,这不是一个问题,因为它只需要渲染相当小的子集。

非常感谢任何想法/建议。

TIA

共有1个答案

狄玮
2023-03-14

这就是我想出的解决办法。它可能不是最优雅的,但我只是在我的车里开了40多英里,当我放大时,我没有任何滞后。我还认为,通过每100个点创建一个大行(大约每100秒创建一个大行,因为我的位置监听器只每秒触发一次),我省去了每次位置更改都必须循环latlng数组的处理。现在我只需要在一次真正的长途跋涉中测试一下:)

// create and add new poly line to map from previos location to new location
            PolylineOptions lineOptions = new PolylineOptions()
                    .add(new LatLng(previousLocation.getLatitude(), previousLocation.getLongitude()))
                    .add(new LatLng(location.getLatitude(), location.getLongitude()))
                    .color(Color.GREEN)
                    .width(5);
            // add the polyline to the map
            Polyline polyline = map.addPolyline(lineOptions);
            // set the zindex so that the poly line stays on top of my tile overlays
            polyline.setZIndex(1000);
            // add the poly line to the array so they can all be removed if necessary
            polylines.add(polyline);
            // add the latlng from this point to the array
            allLatLngs.add(currentLocationLatLng);

            // check if the positions added is a multiple of 100, if so, redraw all of the polylines as one line (this helps with rendering the map when there are thousands of points)
            if(allLatLngs.size() % 100 == 0) {
                // first remove all of the existing polylines
                for(Polyline pline : polylines) {
                    pline.remove();
                }
                // create one new large polyline
                Polyline routeSoFar = map.addPolyline(new PolylineOptions().color(Color.GREEN).width(5));
                // draw the polyline for the route so far
                routeSoFar.setPoints(allLatLngs);
                // set the zindex so that the poly line stays on top of my tile overlays
                routeSoFar.setZIndex(1000);
                // clear the polylines array
                polylines.clear();
                // add the new poly line as the first element in the polylines array
                polylines.add(routeSoFar);
            }
 类似资料:
  • 我试图找到android maps api v2的方法,它将决定我在移动时创建的折线的长度。我会把它放在onLocationChanged()中,以便不断更新。有人知道方法是什么吗?maps api将显示哪些单元的长度吗?

  • 我有一些谷歌地图折线。我试图在它们周围画两条折线,这样它们就形成了某种边界: 所以对于原始折线的每一个点,我计算边界线点,从原点算起25米: 在这个例子中,让我们省略折线的第一个和最后一个点。所以我总是看上一个点和下一个点,计算中心点的偏移量。

  • 我正在从导入geoJSON数据。jsons文件。它在某些文件上工作得很好,但在其他文件上就不行了。我认为我的文件有问题,但我在geojson lint和geojson.io上测试了它们,没有问题。 这是堆栈: 这是我非常简单的代码 这是我的一个JSON导致了这个错误 build.gradle(项目)和build.gradle(应用程序) 欢迎任何想法

  • 我有一个(由Google Maps Android API v2提供),我试图实现的应该足够简单,就是简单地绘制一条弯曲的。 具体地说,我有一个s数组,我不想让它们以锐角连接,而是想让路线很好地圆滑,这样穿过点的线会沿着曲线,而不是直线和锐角。 现在,在旧的Google Maps API中,可以通过创建自定义的,覆盖,然后手动绘制到地图上(例如,使用自定义的和,以及所需的设置)。 不幸的是,在v2

  • 我有以下代码为我绘制多段线,工作正常,但问题是它没有绘制交互式多段线,绘制的线缺少一些像素! 代码工作正常,绘制从一个地方到另一个地方的路线,但没有绘制交互式路线 我认为问题在于我的方法: 忽略标记,只是建议我添加交互式多段线?

  • 本文向大家介绍jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法,包括了jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法。分享给大家供大家参考,具体如下: 1、问题背景 设计一条折线图,但是图形中不用插件自带的颜色,需要自定义