在Android谷歌地图中绘制4K多段线

我正在开发Android设备的应用程序。 主要function是在地图上绘制多段线,以显示每条街道上城市的交通情况。 不幸的是,当我绘制3K多段线时,根据屏幕大小和缩放级别缩小数量 – 我的地图变得非常慢…我没有提及绘制所有线条的时间。

也许你知道更有效的方法来标记街道或在地图上画线?

我也在考虑切换到OSM,但我从来没有使用它,我不知道它有多高效。

我在Samsung Galaxy Note 10.1上debugging应用程序,App使用Map API v2

我的代码绘制多段线:

Polyline line; List<Float> coordinatesStart; List<Float> coordinatesEnd; LatLng start; LatLng end; List<List<Float>> coordinates; int polylinesNumber = 0; for(Features ftr : features){ coordinates = ftr.geometry.coordinates; for(int i = 0; i<coordinates.size()-1; i++){ coordinatesStart = coordinates.get(i); coordinatesEnd = coordinates.get(i+1); start = new LatLng(coordinatesStart.get(1), coordinatesStart.get(0)); end = new LatLng(coordinatesEnd.get(1), coordinatesEnd.get(0)); line = map.addPolyline(new PolylineOptions() .add(start, end) .width(3) .color(0x7F0000FF)); //semi-transparent blue polylinesNumber++; } } 

我将不胜感激任何帮助!

Solutions Collecting From Web of "在Android谷歌地图中绘制4K多段线"

你是否检查你画的多段线是否在屏幕上对用户是可见的? 如果不是,那将是我的第一个想法。 这个问题可能对此有帮助。

这里大优化:

你的主要错误是你使用 new PolyLineOptions 实例为您绘制到地图的每一行。 这使得绘图非常缓慢。

解决办法是:

只能使用折线选项的一个实例,并且只能在循环内使用.add(LatLng)函数。

  //MAGIC #1 here //You make only ONE instance of polylineOptions. //Setting width and color, points for the segments added later inside the loops. PolylineOptions myPolylineOptionsInstance = new PolylineOptions() .width(3) .color(0x7F0000FF); for (Features ftr : features) { coordinates = ftr.geometry.coordinates; for (int i = 0; i < coordinates.size(); i++) { coordinatesStart = coordinates.get(i); start = new LatLng(coordinatesStart.get(1), coordinatesStart.get(0)); //MAGIC #2 here //Adding the actual point to the polyline instance. myPolylineOptionsInstance.add(start); polylinesNumber++; } } //MAGIC #3 here //Drawing, simply only once. line = map.addPolyline(myPolylineOptionsInstance); 

注意:

如果您想为不同的线段/区域使用不同的颜色,则必须使用多个多段线选项,因为多段线选项只能有一种颜色。 但方法将是相同的:使用尽可能less的polylineOptions,你可以。

我想在这个钟声,因为我没有find这个答案完成。 如果缩小,屏幕上仍然会有大量的多段折线,UI线程将会停止。 我解决了这个问题,使用自定义TileProviderLatLng点的球面墨卡托投影来屏幕像素。 这个想法来自于map-utils-library ,它有大多数需要的工具来编写一个canvas到一个tile(还有很多其他的好处)。

我从一个正在编写的项目中编写了一个ComplexTileOverlays示例。 这包括在CustomTileProvider更改Alpha和线条粗细的CustomTileProvider

我首先使用splashscreen将自定义的多段线数据库加载到内存中(例如,它是蒙特利尔岛上一个自行车设施的开放数据库)。 从那里,我画了代表一个瓷砖的canvas256x256像素canvas上的每一行投影。 总体而言,如果您有大量的graphics覆盖图与地图绑定,则此技术会突飞猛进。