无论我是否希望避开高速公路或收费站,我都会收到相同的持续时间和距离
我怀疑问题要么是我的操作顺序,要么是我计算距离和持续时间的方式
我尝试以两种不同的方式设置 setVoid(请参阅代码(,并更改了我的 if 语句以适应 HTML 表单(复选框(可能返回的内容。
我也尝试将 if 语句切换为"return formObject.avoid1"这向我表明 if 语句运行正常 - 所以 .setReduce 没有按照我编写的方式工作,或者距离和持续时间计算没有考虑 setVoid。
function processForm(formObject) {
var allDestinations = [formObject.destination1, formObject.destination2, formObject.destination3, formObject.destination4];
var allDest = [formObject.dest1, formObject.dest2, formObject.dest3, formObject.dest4];
var numWaypoints = 0;
var waypoints = [];
for (var i=0; i<=allDestinations.length; ++i){
if (allDestinations[i] == "TRUE"){
numWaypoints ++;
waypoints.push(allDest[i]);
}
}
var mapObj = Maps.newDirectionFinder();
mapObj.setOrigin(formObject.origin)
.setDestination('my address, never changes');
//the purpose of legOne is to get the distance & duration from me to the input origin. I will always be the first and last stop. I do it this way because the input origin always needs to be the first stop. This prevents 'optimize waypoints' from altering the input origin.
var legOne = mapObj.getDirections();
var totalDistance = legOne["routes"][0]["legs"][0]["distance"]["value"];
var totalDuration = legOne["routes"][0]["legs"][0]["duration"]["value"];
for (var cc=0; cc<numWaypoints; ++cc){
mapObj.addWaypoint(waypoints[cc]);
}
if (formObject.optimize == "true"){
mapObj.setOptimizeWaypoints(true);
}
if (formObject.avoid1 == "yes"){
mapObj.setAvoid(Maps.DirectionFinder.Avoid.HIGHWAYS);
}
if (formObject.avoid2 == "yes"){
mapObj.setAvoid("tolls");
}
var directions = mapObj.getDirections();
var bestRoute = directions["routes"][0];
var numLegs = bestRoute["legs"].length;
for (var c=0; c<numLegs; ++c){
var legNum = directions["routes"][0]["legs"][c];
var legDistance = legNum["distance"]["value"];
var legDuration = legNum["duration"]["value"];
totalDistance += legDistance;
totalDuration += legDuration;
}
var miles = totalDistance * 0.000621371;
var driveTime = totalDuration / 60 / 60;
var numPallets = formObject.numPallets;
var parkTime = numWaypoints * (1/6);
var onOffLoadTime = numPallets * .5;
var totalTime = driveTime + parkTime + onOffLoadTime;
var dataArray = [miles, totalTime, driveTime, numPallets, onOffLoadTime, numWaypoints, parkTime];
return dataArray;
}
如果我们实际上避开高速公路,我希望持续时间会增加,但无论我们是否避开高速公路,我都会得到相同的持续时间
只能设置一种setAvoid()
模式,即可以避开高速公路或收费站,但不能同时设置两者。API 中存在解决此问题的方法,但从我测试的内容来看,应用程序脚本中似乎不可用。
一些测试:
var directions = Maps.newDirectionFinder()
.setOrigin('Times Square, New York, NY')
.setDestination('Space Needle, Seattle, WA')
Logger.log(directions.getDirections().routes[0].legs[0].duration.text) //1 day 18 hours
directions.setAvoid("highways")
Logger.log(directions.getDirections().routes[0].legs[0].duration.text) //2 days 8 hours
directions.setAvoid("tolls")
Logger.log(directions.getDirections().routes[0].legs[0].duration.text) //1 day 20 hours
这意味着您的 if 语句应该是:
if (formObject.avoid1 == "yes"){
mapObj.setAvoid(Maps.DirectionFinder.Avoid.HIGHWAYS);
} else if (formObject.avoid2 == "yes"){
mapObj.setAvoid(Maps.DirectionFinder.Avoid.TOLLS);
}
(优先考虑避开高速公路(,或者,您的表单应仅包含单个避免选项(例如,mapObj.setAvoid(formObj.avoid);
(。使用给定的代码,avoid2
"yes"
可能会导致设置setAvoid()
以避免通行费,这可能不是您路线上的一个因素。