Ich habe ein Raster von Koordinaten erstellt, um die Entfernungen zu berechnen und einige Logik Zeile für Zeile anzuwenden. Ich muss den Abstand zwischen Punkt A und Punkt B berechnen, oder, wenn ich einen Punkt C habe, den Abstand zwischen Punkt A und Punkt B und zwischen Punkt B und Punkt C, und addiere die zwei Werte.Entfernungsberechnung mit Callback in .NET Gridview
Ich habe versucht, eine Callback-Funktion zu verwenden, aber der Rückgabewert, der bei der Berechnung der Entfernung zwischen Punkt B und Punkt C empfangen wurde, ist immer das letzte Koordinatenpaar und nicht das der aktuellen Linie. Was ist der Fehler in der angehängten Funktion? Und wie kann ich meinen Anruf weniger "umständlich" machen?
Danke
function GetDistance(img, txtRimborso, hfImportoRimborso, hfLastOfTheDay) {
var latA = img.attributes['latA'].value;
var lngA = img.attributes['lngA'].value;
var latB = img.attributes['latB'].value;
var lngB = img.attributes['lngB'].value;
var latC = img.attributes['latC'].value;
var lngC = img.attributes['lngC'].value;
var isLastOfTheDay = hfLastOfTheDay.value;
var distance;
source = new google.maps.LatLng(latA, lngA);
destination = new google.maps.LatLng(latB, lngB);
GetDist(source, destination, function() {
distanceA = Number(this);
if (latC == '' && lngC == '')
{
console.log('latC = \'\' lngC = \'\'');
source = new google.maps.LatLng(latB, lngB);
destination = new google.maps.LatLng(latA, lngA);
GetDist(source, destination, function() {
distanceB = Number(this);
var fullDistance = Number(((Math.floor(distanceA/1000))) + Number((Math.floor(distanceB/1000))));
console.log('A: ' + Math.floor(distanceA/1000) + ' B: ' + Math.floor(distanceB/1000) + ' = ' + fullDistance);
});
} else if (isLastOfTheDay == 'True') {
console.log('isLastOfTheDay: ' + isLastOfTheDay);
source = new google.maps.LatLng(latB, lngB);
destination = new google.maps.LatLng(latC, lngC);
GetDist(source, destination, function() {
distanceB = Number(this);
var fullDistance = Number(((Math.floor(distanceA/1000))) + Number((Math.floor(distanceB/1000))));
console.log('A: ' + Math.floor(distanceA/1000) + ' B: ' + Math.floor(distanceB/1000) + ' = ' + fullDistance);
});
} else {
var fullDistance = (Math.floor(distanceA/1000));
}
});
}
function GetDist(source, destination, fn) {
var service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix({
origins: [source],
destinations: [destination],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: true,
avoidTolls: true
}, function (response, status) {
if (status == google.maps.DistanceMatrixStatus.OK && response.rows[0].elements[0].status != "ZERO_RESULTS") {
fn.call(response.rows[0].elements[0].distance.value);
}
else
fn.call(0);
});
}