【问题标题】:Leaflet Routing Machine waypoints added as markers传单路由机航路点添加为标记
【发布时间】:2015-08-10 06:29:08
【问题描述】:

我正在尝试使用存储在数据库中的航点在我的网络应用程序中创建传单路由机器路线。我首先创建控件:

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

函数“getTestRoute”从数据库中提取我的航路点作为纬度/经度对并将它们添加到控件中,函数如下:

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/

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

【问题讨论】:

  • 尝试从“waypoints: [null]”中删除“null”。如果这没有帮助,请提供一个 jsfiddle,我会看看。
  • 是的,@gusper 所说的 - 数组中的 null 条目将作为空航点保留在列表的开头;此外,请检查 JavaScript 控制台中的错误,因为 null 可能会导致 LRM 中的错误。
  • ..控制台中没有错误

标签: javascript routing leaflet


【解决方案1】:

问题在于使用 spliceWaypoints 与 Leaflet Routing Machine 中未记录的功能。

当控件创建时,它会自动添加路点,这样路线总是有一个开始和一个结束路点,这样的路点还没有提供。这意味着:无论您做什么,getWaypoints 都会始终返回一个包含至少两个条目的数组;如果未提供,这些航路点的latLng 属性将设置为undefined,表示尚未提供位置。

在有问题的代码中,控件已创建,并将获得由 Leaflet Routing Machine 隐式添加的两个航路点,位置为undefined。稍后,您添加了几个新航点,但隐含的两个航点仍然存在,没有位置。不会计算路线,因为缺少两个航路点。

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

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

【讨论】:

  • 非常感谢。我现在遇到的问题是,使用您的解决方案,我如何获得未知数量的航点,然后将它们添加到路线中。在您的示例中,您知道有多少条路线,因此可以创建该数量的 L.LatLng。如果我不知道会有多少航点怎么办?
  • 好的,我想我已经完成了。你能检查这是正确的方法吗? jsfiddle.net/drcccx91/4 - 我还是想删除标记​​span>
  • @user1542125 是的,看起来不错。有很多方法可以做到这一点,但这会奏效。您可以使用createGeocoder 选项,并将其设置为返回null 的函数:createGeocoder: function() { return null; }。顺便说一句,如果成功,请投票和/或接受这个答案:)
猜你喜欢
  • 1970-01-01
  • 2021-08-27
  • 2014-04-21
  • 1970-01-01
  • 2022-07-24
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多