Javascript 为什么谷歌地图API方向服务没有显示最佳路线?
我不熟悉谷歌地图Javascript API,并做一些基本的事情。我想展示黄石国家公园的一日游路线。起点是West Thumb间歇泉盆地,终点是Norris间歇泉盆地,如下代码所示(另存为html文件)Javascript 为什么谷歌地图API方向服务没有显示最佳路线?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我不熟悉谷歌地图Javascript API,并做一些基本的事情。我想展示黄石国家公园的一日游路线。起点是West Thumb间歇泉盆地,终点是Norris间歇泉盆地,如下代码所示(另存为html文件) 测试 函数init(){ var map=new google.maps.map(document.getElementById(“googleMap”){ 中心:新google.maps.LatLng({lat:44.427963,lng:-110.5906437}),//黄石国家公园 缩放
测试
函数init(){
var map=new google.maps.map(document.getElementById(“googleMap”){
中心:新google.maps.LatLng({lat:44.427963,lng:-110.5906437}),//黄石国家公园
缩放:12,
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var directionsService=新的google.maps.directionsService;
var directionsDisplay=新建google.maps.DirectionsRenderer;
方向显示.setMap(地图);
计算显示路线(方向服务、方向显示);
}
函数calculateAndDisplayRoute(方向服务、方向显示){
方向服务.路线({
起源:{lat:44.4170394,lng:-110.5740972},//西拇指间歇泉盆地,
目的地:{lat:44.7262344,液化天然气:-110.7217907},//诺里斯间歇泉盆地,
travelMode:google.maps.travelMode.DRIVING,
},功能(响应、状态){
if(status==google.maps.directionstatus.OK){
方向显示。设置方向(响应);
}否则{
window.alert('由于'+状态,指示请求失败);
}
});
}
google.maps.event.addDomListener(窗口'load',init);
黄石国家公园
但返回的路线不是最佳路线。
这似乎是一个谷歌地图JavaScript API错误?有什么想法/想法吗?提前谢谢
更新代码。另一件有趣的事。如果没有优化的WayPoints,它工作得很好
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<script>
function init() {
var map = new google.maps.Map(document.getElementById("googleMap"), {
center: new google.maps.LatLng({lat: 44.427963, lng: -110.5906437}),// Yellowstone National Park
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var directionsService = new google.maps.DirectionsService;
var directionsDisplay = new google.maps.DirectionsRenderer;
directionsDisplay.setMap(map);
calculateAndDisplayRoute(directionsService, directionsDisplay);
}
function calculateAndDisplayRoute(directionsService, directionsDisplay) {
var wayPoints = [{ location: {lat: 44.4604826, lng: -110.8303263}, stopover: true }, { location: {lat: 44.525086, lng: -110.840378}, stopover: true }]; // Old Faithful Geyser and Grand Prismatic Spring
directionsService.route({
origin: {lat: 44.4170394, lng: -110.5740972}, // West Thumb Geyser Basin,
destination: {lat: 44.7262344, lng: -110.7217907}, // Norris Geyser Basin,
waypoints: wayPoints,
//optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING,
}, function(response, status) {
if (status === google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
google.maps.event.addDomListener(window, 'load', init);
</script>
</head>
<body>
<font size=2><b>Yellowstone National Parks</b></font>
<div id=googleMap style="width:1100px;height:800px;"></div>
</body>
</html>
测试
函数init(){
var map=new google.maps.map(document.getElementById(“googleMap”){
中心:新google.maps.LatLng({lat:44.427963,lng:-110.5906437}),//黄石国家公园
缩放:12,
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var directionsService=新的google.maps.directionsService;
var directionsDisplay=新建google.maps.DirectionsRenderer;
方向显示.setMap(地图);
计算显示路线(方向服务、方向显示);
}
函数calculateAndDisplayRoute(方向服务、方向显示){
var航路点=[{位置:{lat:44.4604826,lng:-110.8303263},中途停留:true},{位置:{lat:44.525086,lng:-110.840378},中途停留:true};//老忠实间歇泉和大棱柱泉
方向服务.路线({
起源:{lat:44.4170394,lng:-110.5740972},//西拇指间歇泉盆地,
目的地:{lat:44.7262344,液化天然气:-110.7217907},//诺里斯间歇泉盆地,
航路点:航路点,
//航路点:对,
travelMode:google.maps.travelMode.DRIVING,
},功能(响应、状态){
if(status==google.maps.directionstatus.OK){
方向显示。设置方向(响应);
}否则{
window.alert('由于'+状态,指示请求失败);
}
});
}
google.maps.event.addDomListener(窗口'load',init);
黄石国家公园
无法优化航路点的顺序(您只有一个航路点)。优化航路点
选项仅重新排列航路点,不会更改起点或目的地
发件人:
默认情况下,方向服务按给定顺序计算通过所提供航路点的路线。或者,您可以在DirectionRequest中传递optimizeWaypoints:true,以允许方向服务通过以更高效的顺序重新排列航路点来优化提供的路线。(此优化是旅行商问题的应用。)所有航路点必须是方向服务的中途站,以优化其路线
它将无法优化航路点的顺序(您只有一个航路点)。
优化航路点
选项仅重新排列航路点,不会更改起点或目的地
发件人:
默认情况下,方向服务按给定顺序计算通过所提供航路点的路线。或者,您可以在DirectionRequest中传递optimizeWaypoints:true,以允许方向服务通过以更高效的顺序重新排列航路点来优化提供的路线。(此优化是旅行商问题的应用。)所有航路点必须是方向服务的中途站,以优化其路线
谢谢你的快速回复。实际上,我刚刚从上面的代码中删除了一个航路点,即“大棱柱形弹簧”。你可以在图片中看到它。即使在我添加了一个以上的航路点之后,结果也是一样的。请更新您的问题,以包含一个演示该问题的示例。嗨,geocodezip,根据请求,我创建了一个简单的html,以便于故障排除。另外,让我们先忘记航路点,比如说只有起点和终点,根据谷歌地图API文档,默认路线应该是最佳路线,但显然不是。这是我最初的测试。正因为如此,后来我添加了航路点(老忠实和大棱柱泉),并试图强制它显示最佳的航路点,但也没有效果。完全不同的问题。我想这是一个数据问题,路由引擎认为它不允许从西拇指间歇泉盆地左转,所以它向右转,但是那条路在冬天是封闭的,所以它会在可能的时候掉头。谢谢你的快速回复。实际上,我刚刚从上面的代码中删除了一个航路点,即“大棱柱形弹簧”。你可以在图片中看到它。即使在我添加了一个以上的航路点之后,结果也是一样的。请更新您的问题,以包含一个演示该问题的示例。嗨,geocodezip,根据请求,我创建了一个简单的html,以便于故障排除。还有,让我们先忘记航路点,
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<script>
function init() {
var map = new google.maps.Map(document.getElementById("googleMap"), {
center: new google.maps.LatLng({lat: 44.427963, lng: -110.5906437}),// Yellowstone National Park
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var directionsService = new google.maps.DirectionsService;
var directionsDisplay = new google.maps.DirectionsRenderer;
directionsDisplay.setMap(map);
calculateAndDisplayRoute(directionsService, directionsDisplay);
}
function calculateAndDisplayRoute(directionsService, directionsDisplay) {
var wayPoints = [{ location: {lat: 44.4604826, lng: -110.8303263}, stopover: true }, { location: {lat: 44.525086, lng: -110.840378}, stopover: true }]; // Old Faithful Geyser and Grand Prismatic Spring
directionsService.route({
origin: {lat: 44.4170394, lng: -110.5740972}, // West Thumb Geyser Basin,
destination: {lat: 44.7262344, lng: -110.7217907}, // Norris Geyser Basin,
waypoints: wayPoints,
//optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING,
}, function(response, status) {
if (status === google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
google.maps.event.addDomListener(window, 'load', init);
</script>
</head>
<body>
<font size=2><b>Yellowstone National Parks</b></font>
<div id=googleMap style="width:1100px;height:800px;"></div>
</body>
</html>