我正在尝试使用存储在数据库中的路标在我的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/
从小提琴上可以看出,在点之间没有创建路线,并且这些点被添加为标记(我假设是意外的?)。
答案 0 :(得分:2)
问题是在传单路由机中使用spliceWaypoints
和未记录的功能。
创建控件时,它会自动添加路标,使路线始终具有起点和终点,此类路标尚未提供。这意味着:无论你做什么,getWaypoints
将总是返回一个至少有两个条目的数组;如果未提供,这些航点的latLng
属性设置为undefined
,表示尚未提供位置。
在相关代码中,控件已创建,并将通过Leaflet Routing Machine隐式添加两个航点,并带有undefined
个位置。稍后,您添加了几个新的航点,但隐含的两个航点仍然没有位置。不会计算任何路线,因为两个航路点缺少位置。
解决方案是首先构建航点数组,然后调用setWaypoints
,而不是spliceWaypoints
。
查看小提琴的更新版本:http://jsfiddle.net/c4yfy4ek/53/