我现在正在开发一个适用于 Android 设备的应用程序。主要功能是在地图上绘制折线以显示城市中每条街道的交通情况。不幸的是,当我绘制大约 3K 折线时 - 数量会根据屏幕尺寸和缩放级别而减少 - 我的地图变得非常慢......我没有提及绘制所有线条的时间。
也许您知道在地图上标记街道或画线的更有效方法?
我也想过改用OSM,但我从未使用过它,我不知道它的效率如何。
我在 Samsung Galaxy Note 10.1 上调试应用程序,并且应用程序使用 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++;
}
}
我将不胜感激任何帮助!
这里有很棒的优化:
你的主要错误是you use 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);
注意力:
如果您想为不同的线段/部分使用不同的颜色,则必须使用多个折线选项,因为折线选项只能有一种颜色。但方法是相同的:使用尽可能少的 polylineOptions。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)