我是Google Maps API的新用户,到目前为止,我遇到了很多问题。
我正在尝试从一系列复选框确定的latlng坐标中映射航点。
这是我的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
答案 0 :(得分:1)
目前,您的脚本永远不会显示任何路线,因为您缺少调用directionsDisplay.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>
答案 1 :(得分:0)
关于您的Javascript与页面HTML的关系,没有太多信息。但这一行
var checkboxArray = document.getElementsByName("waypoints[]");
应该是
var checkboxArray = document.getElementsByName("waypoints");
假设您的所有复选框都具有名称waypoints
。
引号内的内容应与复选框元素的名称完全匹配,因此如果每个复选框的名称都为waypoint
(因为每个复选框都标记了一个航点,这是可能的),那么您应该使用{{ 1}}查找具有该名称的所有元素。