fxnGetNearestDealer: function () {
//Gets LatLng for given Zipecode and displays the dealer.
fxnGetLatLngforZip(function () {
//Gets The Nearest Dealers Index out of dealers in the site.
fxnGetNearDealerIndex(function (distance) {
alert(distance);
//Gets Html To Display NearestDealer Details.
sHtml = fxnGetHtmlforNearestDealer();
//Displays Nearest Dealer Details in the span with Id "spanDNAddr".
document.getElementById('spanDNAddr').innerHTML = sHtml;
});
});
};
fxnGetLatLngforZip = function (callback) {
var oGeocoder = new google.maps.Geocoder(),
iZipcode = document.getElementById('txtZipCode').value;
//Boundary checks
if (!iZipcode) { return; }
oGeocoder.geocode({ 'address': iZipcode }, function (result, status) {
if (status == google.maps.GeocoderStatus.OK) {
g_oLatLng = result[0].geometry.location;
callback();
}
else {
//Can use status its self to display the error message.
document.getElementById('spanDNAddr').innerHTML = "No Results Found Enter Valid ZipCode";
}
});
};
fxnGetNearDealerIndex = function (callback) {
//Boundary Checks
if (!g_oLatLng) { return; }
var oDealerLatlng = null,
dDistance = null,
tempindex = null,
dTemp = null;
for (var iAddrIdx = 0; iAddrIdx < g_oAddrs.length; iAddrIdx++) {
oRequest = {
origin: g_oLatLng,
destination: new google.maps.LatLng(g_oAddrs[iAddrIdx].latitude, g_oAddrs[iAddrIdx].longitude),
travelMode: google.maps.TravelMode.DRIVING
};
g_oDirections.route(oRequest, function (response, status) {
if (status == google.maps.DirectionsStatus.OK) {
dDistance = response.routes[0].legs[0].distance.value;
if (!dTemp) {
dTemp = dDistance;
}
else if (dDistance < dTemp) {
dTemp = dDistance;
g_iNearIndex = iAddrIdx;
}
}
});
}
callback(dTemp);
};
在上面的函数“fxnGetNearestDealer”是起点我从那里尝试获取给定的zipcode的latlng,因为它将是一个异步调用我使用回调它工作正常..之后我必须进行另一个异步调用计算给定的zipcode latlng和在forloop中迭代的每个latlng之间的驱动距离。并获得最小的值。我最终写得像上面那样....问题它永远不会返回任何值,它在警报中给出null。如果我在firebug中看到它迭代所有时间请求创建好,但它永远不会进入“g_oDirections.route”函数,因为它是异步我使用回调但它不起作用....任何关于PLZ的工作... ...
答案 0 :(得分:1)
以下示例是通用的。它展示了如何从曼哈顿的一个点到多个邮政编码。
var dirService = new google.maps.DirectionsService();
//Hold all destinations in an array
var destinations = ['10001', '10002', '10003'];
//Start from somewhere in Manhattan
var startLocation = new google.maps.latLng(40.769102, -73.971176);
function drivingDistance(start, end) {
var request = {
origin: start,
destination: end,
travelMode: google.maps.TravelMode.DRIVING
};
//Use a separate named function as callback(not anonymous inline)
dirService.route(request, routeCallback);
}
//callback function
function routeCallback(result, status) {
if (status == google.maps.DirectionsStatus.OK){
alert(result.routes[0].legs[0].duration.text);
//alternative:
//alert(result.routes[0].legs[0].distance.text);
//If success then remove the first destination from the array and execute the next request
destinations.shift();
getnextRoute();
}
}
function getnextRoute(){
if(destinations.length){
drivingDistance(startLocation, destinations[0]);
}
}
// Start executing
getnextRoute();