【问题标题】:Google Maps Waypoints not showing up谷歌地图航点未显示
【发布时间】:2012-07-06 20:02:12
【问题描述】:

我是 Google Maps API 的新手,到目前为止我遇到了很多问题。

我正在尝试从由一组复选框确定的纬度坐标映射航点。

这是我的完整 js 文件:

var directionDisplay;
var directionsService = new google.maps.DirectionsService();
var map;


var waypts = [];
var start = new google.maps.LatLng(41.850033, -87.6500523);
var end = new google.maps.LatLng(40.850033, -87.6500523);

function initialize() 
{
    directionsDisplay = new google.maps.DirectionsRenderer();
    var myOptions = {
        zoom: 6,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center: new google.maps.LatLng(41.850033, -87.6500523)
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    directionsDisplay.setMap(map);

}

function calcRoute()
{
    var checkboxArray = document.getElementsByName("waypoints[]");


    for (var i = 0; i < checkboxArray.length; i++) 
    {
        if (checkboxArray[i].checked) 
        {
            var lat = parseFloat(checkboxArray[i].attributes["lat"].value);
            var lng = parseFloat(checkboxArray[i].attributes["lng"].value);

            waypts.push({
                location: new google.maps.LatLng(lat, lng),
                stopover: true
            });
        }
    }
}

var request = {
    origin: start, 
    destination: end,
    waypoints: waypts,
    optimizeWaypoints: true,
    travelMode: google.maps.DirectionsTravelMode.DRIVING
};

directionsService.route(request, function(response, status) {
    console.log("mapping...");

    if(status == google.maps.DirectionsStatus.NOT_FOUND)
    {
        console.log("Could not one or more of locations");
    }
});

当页面加载时,地图会显示并在控制台中弹出“mappings...”。当我按下 calcRoute 提交按钮时,没有任何反应。我已经记录了 lat/long 和 waypt 对象,所以我知道他们已经到达了那个点,但似乎永远不会重新计算路线等。

我真的只需要一个基本的演示,但我发现的唯一一个是我几乎所有东西都使用过但我没有得到任何结果: Google Example Directions Waypoints

【问题讨论】:

    标签: google-maps google-maps-api-3


    【解决方案1】:

    目前您的脚本永远不会显示任何路线,因为您错过了调用方向显示.setDirections() 来打印路线。

    你还应该把directionsService.route()的调用放到calcRoute函数中。

    固定代码:

    <script type="text/javascript">
    var directionDisplay;
    var directionsService = new google.maps.DirectionsService();
    var map;
    
    var start = new google.maps.LatLng(41.850033, -87.6500523);
    var end = new google.maps.LatLng(40.850033, -87.6500523);
    
    function initialize() 
    {
        directionsDisplay = new google.maps.DirectionsRenderer();
        var myOptions = {
            zoom: 12,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            center: new google.maps.LatLng(41.850033, -87.6500523)
        }
    
        map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
        directionsDisplay.setMap(map);
    
    }
    
    function calcRoute()
    {
        var checkboxArray = document.getElementsByName("waypoints[]");
        var waypoints=[];
    
        for (var i = 0; i < checkboxArray.length; i++) 
        {
            if (checkboxArray[i].checked) 
            {
                var lat = parseFloat(checkboxArray[i].attributes["lat"].value);
                var lng = parseFloat(checkboxArray[i].attributes["lng"].value);
    
                waypts.push({
                    location: new google.maps.LatLng(lat, lng),
                    stopover: true
                });
            }
        }
    
    
    var request = {
        origin: start, 
        destination: end,
        waypoints: waypts,
        optimizeWaypoints: true,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
    
    directionsService.route(request, function(response, status) {
        if(status == google.maps.DirectionsStatus.OK)
        {
            //print the route
            directionsDisplay.setDirections(response);
        }
        else
        {
          console.log('something went wrong',status);
        }
    
    });
    }
    </script>
    

    【讨论】:

    • 是的!这是确切的问题。我没有意识到我需要状态 OK 和 setDirections。而且还要在 calcRoute 函数中包含请求路由和内容。这解释了 start、end 和 waypts 中的变量问题。非常感谢!
    【解决方案2】:

    关于您的 Javascript 如何与页面 HTML 相关的信息并不多。但是这一行

    var checkboxArray = document.getElementsByName("waypoints[]");
    

    应该是

    var checkboxArray = document.getElementsByName("waypoints");
    

    假设您所有的复选框都有名称waypoints

    引号内的内容应该与复选框元素的名称完全匹配,因此如果每个复选框的名称为 waypoint(因为每个复选框都标记了一个路点,这是一种可能性),那么您应该使用 .getElementsByName("waypoint") 来查找具有该名称的所有元素。

    【讨论】:

    • 我的复选框有 name="waypoint[]" 并且数据确实流过它,但似乎推送不会重绘地图。如果添加 console.log(lat + ", " + lng);在 calcRoute() 的 if 循环底部,它从复选框中输出正确的数据,例如:44.649864, -93.167025
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多