将传单路由机器航点添加为标记

时间:2015-08-10 06:29:09

标签: javascript routing leaflet

我正在尝试使用存储在数据库中的路标在我的Web应用程序中创建传单路由机路由。我是第一个创建控件:

var routeControl = L.Routing.control({waypoints: [null]}).addTo(map);
getTestRoute("1");

函数'getTestRoute'将我的航点从db作为lat / long对拉入并将它们添加到控件中,这是函数:

function getTestRoute(route){

    $.ajax({

    url: './get_route.php',
    type: 'POST',
    dataType: 'JSON',
    data: {
          getRoute: route
    },

    success: function (res) {


        $.each(res,function(key,value){

            var newLatLng = new L.LatLng(res[key].latitude, res[key].longitude);


            routeControl.spliceWaypoints(0, 0, newLatLng);

        })

    }

    });
}

我的问题是,我没有看到地图上的路线,而是看到我的路标(总共五个)作为标记添加到地图中,而它们之间没有路由。

请帮助!!!

以下是我的问题:http://jsfiddle.net/c4yfy4ek/46/

从小提琴上可以看出,在点之间没有创建路线,并且这些点被添加为标记(我假设是意外的?)。

enter image description here

1 个答案:

答案 0 :(得分:2)

问题是在传单路由机中使用spliceWaypoints和未记录的功能。

创建控件时,它会自动添加路标,使路线始终具有起点和终点,此类路标尚未提供。这意味着:无论你做什么,getWaypoints总是返回一个至少有两个条目的数组;如果未提供,这些航点的latLng属性设置为undefined,表示尚未提供位置。

在相关代码中,控件已创建,并将通过Leaflet Routing Machine隐式添加两个航点,并带有undefined个位置。稍后,您添加了几个新的航点,但隐含的两个航点仍然没有位置。不会计算任何路线,因为两个航路点缺少位置。

解决方案是首先构建航点数组,然后调用setWaypoints,而不是spliceWaypoints

查看小提琴的更新版本:http://jsfiddle.net/c4yfy4ek/53/