Android高德地图步行路径规划错乱的问题解决[问题一]

来源:互联网 发布:淘宝手机端的收藏链接 编辑:程序博客网 时间:2024/06/11 05:26

因为最近项目需求要做地图,用的是高德的。需要在两点之间规划步行路径。

但是在开发中遇到了些比较蛋疼的问题。做次记录以备日后查阅。
我用的是高德4.11版本的3d地图

问题一:
步行路径规划,当终点或者起点在楼里或者没有实际道路的情况下会出现下面的这种状况,体验很糟糕。




这种情况困扰了我好久,在高德论坛上看到有人说到了
protected void addPolyLine(PolylineOptions options) 

这个方法,管理路线的。于是就去看了一下。顺便解决了这个问题。

在高德官方demo的overlay包下的RouteOverlay类中找到了上面的这个方法,查找调用后,
到了WalkRouteOverlay中的addToMap()方法。
/** * 添加步行路线到地图中。 * * @since V2.1.0 */public void addToMap() {    initPolylineOptions();    try {        List<WalkStep> walkPaths = walkPath.getSteps();        for (int i = 0; i < walkPaths.size(); i++) {            WalkStep walkStep = walkPaths.get(i);            LatLng latLng = AMapServicesUtil.convertToLatLng(walkStep                    .getPolyline().get(0));            if (i < walkPaths.size() - 1) {                if (i == 0) {                    addWalkPolyLine(startPoint, latLng);                }                checkDistanceToNextStep(walkStep, walkPaths.get(i + 1));            } else {                LatLng latLng1 = AMapServicesUtil                        .convertToLatLng(getLastWalkPoint(walkStep));                addWalkPolyLine(latLng1, endPoint);            }            //addWalkStationMarkers(walkStep, latLng);            //问题出现在这个方法上。            addWalkPolyLines(walkStep);        }        addStartAndEndMarker();        showPolyline();    } catch (Throwable e) {        e.printStackTrace();    }}

默认情况下应该是上面这样的。

注释掉的这个方法
addWalkStationMarkers(walkStep,latLng)
如果使用了这个方法,路线上会出现小人图标
即使你设置了
walkRouteOverlay.setNodeIconVisibility(true);



解决方法:

该方法一共添加了两次路线所以才会导致上面的问题。so。需要做的事情很简单了。

 /**     * 添加步行路线到地图中。     *     * @since V2.1.0     */    public void addToMap() {        initPolylineOptions();        try {            List<WalkStep> walkPaths = walkPath.getSteps();            for (int i = 0; i < walkPaths.size(); i++) {                WalkStep walkStep = walkPaths.get(i);                LatLng latLng = AMapServicesUtil.convertToLatLng(walkStep                        .getPolyline().get(0));              /*  if (i < walkPaths.size() - 1) {                    if (i == 0) {                        addWalkPolyLine(startPoint, latLng);                    }                    checkDistanceToNextStep(walkStep, walkPaths.get(i + 1));                } else {                    LatLng latLng1 = AMapServicesUtil                            .convertToLatLng(getLastWalkPoint(walkStep));                    addWalkPolyLine(latLng1, endPoint);                }*/                //addWalkStationMarkers(walkStep, latLng);                //问题出现在这个方法上。                addWalkPolyLines(walkStep);            }            addStartAndEndMarker();            showPolyline();        } catch (Throwable e) {            e.printStackTrace();        }    }
效果如下


哎。终于走在路上了。



1 0
原创粉丝点击