1

我是 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");
    }
});

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

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

4

2 回答 2

1

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

您还应该将方向服务.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>
于 2012-07-06T21:56:25.250 回答
0

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

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

应该是

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

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

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

于 2012-07-06T21:45:30.853 回答