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

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)

我将不胜感激任何帮助!

Ada*_*gyi 5

这里的优化很棒:

您的主要错误是 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.


asc*_*sco 3

您是否检查您绘制的折线是否对屏幕上的用户可见?如果没有,那将是我的第一个想法。这个问题可能对此有所帮助。