基于Leaflet的地图导航与左右转弯提示

最近的一个小项目需求,需要在路径导航的基础上,增加左右转弯的提示,效果图吐下:

导航的算法在之前的博文中均有提到,这里就提供一下左转右转的计算代码:

/**
 * point1,2,2均为屏幕像素点,leaflet提供了转换方法
 * @param point1
 * @param point2
 * @param point3
 */
function getLeftOrRight(point1, point2, point3) {

    var vec1 = [point2.x - point1.x, point2.y - point1.y];
    var vec2 = [point1.x - point3.x, point1.y - point3.y];
    var a_b = (vec1[0] * vec2[0] + vec1[1] * vec2[1]);
    var moudle1 = getMoudle(vec1[0], vec1[1]);
    var moudle2 = getMoudle(vec2[0], vec2[1]);
    var degree = Math.acos(a_b / (moudle1 * moudle2));

    if (degree < 2.3) {
        if ((vec1[0] * vec2[1] - vec1[1] * vec2[0]) > 0) {//在右侧
            if(showPopup!=1){
                showPopup=1;
                L.popup()
                    .setLatLng(map.containerPointToLatLng(point2))
                    .setContent('<p>左转</p>')
                    .openOn(map);
            }

        } else {//在左侧
            if(showPopup!=2){
                showPopup=2;
                L.popup()
                    .setLatLng(map.containerPointToLatLng(point2))
                    .setContent('<p>右转</p>')
                    .openOn(map);
            }
        }
    }else {
        showPopup=0;
        map.closePopup();
    }
}

/**
 * 获取长度
 * @param x
 * @param y
 * @return {number}
 */
function getMoudle(x, y) {
    return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2))
}

 

转载自:https://blog.csdn.net/GISuuser/article/details/86649347

You may also like...