Krz*_*ski 7 java performance android google-maps-android-api-2
我正在开发Android设备的应用程序.主要功能是在地图上绘制折线,以显示每条街道上城市的交通量.不幸的是,当我绘制3K折线时 - 根据屏幕尺寸和缩放级别减少数量 - 我的地图变得非常慢......我没有提到绘制所有线条的时间.
也许你知道在地图上标记街道或画线的更有效方法吗?
我也在考虑切换到OSM,但我从未使用它,我不知道它的效率如何.
我调试三星Galaxy Note 10.1上的应用程序,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++;
}
}
Run Code Online (Sandbox Code Playgroud)
我将不胜感激任何帮助!
您的主要错误是您 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);
Run Code Online (Sandbox Code Playgroud)
注意:
如果您希望为不同的线段/截面设置不同的颜色,则必须使用多个折线选项,因为折线选项只能有1种颜色.但方法是相同的:使用尽可能少的polylineOptions.
| 归档时间: |
|
| 查看次数: |
4897 次 |
| 最近记录: |