Ich habe eine Funktion, die 2 Paare von Längen-und Breitengrad und gibt eine Strecke in m.Wie behandelt man mehrere Formate für Daten in der gleichen Funktion in Javascript
function distance(lat1, lon1, lat2, lon2){
var p = Math.PI/180;
var c = Math.cos;
var a = 0.5 - c((lat2 - lat1) * p)/2 +
c(lat1 * p) * c(lat2 * p) *
(1 - c((lon2 - lon1) * p))/2;
return 12742 * Math.asin(Math.sqrt(a)) * 1000; // 2 * R; R = 6371 km
}//Distance
(bemerke ich diese Funktion nicht erstellt haben, aber aus einer anderen Frage kam auf SO)
ich mehrere Quellen für Breiten- und Längengrade haben, und ich würde gerne wissen, wie sie zu handhaben. Ich habe versucht, ||
wie diese
var distanceFromTarget = distance(
target.latitude || target.lat || target.lat(),
target.longitude || target.lng || target.lng(),
current.latitude || current.lat || current.lat(),
current.longitude || current.lat || current.lng()
);
mit würde Ich mag die Funktion verwenden Eingabe von drei verschiedenen Formaten
navigator.geolocation.x
die Daten
{latitude: 0000, longitude:0000}
ein Plugin kehrt zu handhaben, die in dem Format gibt
zurück{lat: 000, lng: 000}
und Google Maps API, die eine komplexe Aufgabe für den Standort gibt Getter für lat und lng etwas wie folgt enthält:
location = {lat(){return latitude}, lng(){return longitude}}
Wie kann ich alle drei umgehen? Ich dachte, was ich oben hatte funktioniert, aber jetzt ist es klar, dass es nicht ist. Die Entfernung gibt NaN zurück, wenn sich der Standort im Format target.lat()
befindet. Es wäre auch schön, wenn jemand erklären könnte, wie ||
im Allgemeinen funktioniert, da ich dachte, es würde nur das nächste Objekt in der Zeile verwenden, wenn das vorherige nicht definiert war.
'||' ist ein Kurzschlussoperator, was bedeutet, wenn der erste Fall wahr ist, wird der Rest in diesem Fall nicht ausgewertet werden. – Aaron
Ich habe Ihren Code getestet und es hat gut funktioniert. Es gibt allerdings einen kleinen Fehler im vierten Argument: 'current.lat' anstelle von' current.lng' –
Danke Chris, dass du das entdeckt hast. Obwohl es nicht die Lösung zu sein schien, bekam ich NaN als meine Entfernung, wenn ich Daten aus den Google Maps nutze. Ich ändere die Reihenfolge der Operatoren, dh setze 'target.lat()' vor, bevor 'target.lat' das Problem gelöst zu haben scheint. Ich denke, dass target.lat wie definiert gelesen wurde und dann die Operationen für die Funktion ausgeführt wurden und nicht der Wert, der von der Funktion zurückgegeben wurde. Ich habe es jedoch noch nicht mit dem Plugin-Fall getestet. – xerotolerant