Einführung in die auf Breiten- und Längengraden basierende Entfernungsberechnung
Die Berechnung der Entfernung zwischen zwei Punkten auf der Erdoberfläche anhand ihrer Breiten- und Längenkoordinaten ist eine grundlegende Aufgabe in verschiedenen Anwendungen. Im Folgenden untersuchen wir die Feinheiten der Berechnung dieser Entfernung mithilfe eines Java-Codeausschnitts und befassen uns mit einer verbesserten Implementierung, die Höhenunterschiede berücksichtigt.
Berechnung der Entfernung mithilfe eines Java-Codeausschnitts
Der von Dommer bereitgestellte Code verwendet eine vereinfachte Formel, um den Abstand zwischen zwei Punkten auf der Erdoberfläche zu berechnen:
<code class="java">double temp = Math.cos(Math.toRadians(latA)) * Math.cos(Math.toRadians(latB)) * Math.cos(Math.toRadians((latB) - (latA))) + Math.sin(Math.toRadians(latA)) * Math.sin(Math.toRadians(latB)); return temp * RADIUS * Math.PI / 180;</code>
Diese Formel geht von einer kugelförmigen Erde aus und liefert vernünftige Ergebnisse für kleine Entfernungen. Höhenunterschiede werden jedoch nicht berücksichtigt, was bei erheblichen Entfernungen zu Ungenauigkeiten führen kann.
Einführung der Haversine-Formel für die höhenbezogene Entfernungsberechnung
Um die Einschränkungen zu beheben Von der von Dommer verwendeten Formel wenden wir uns der Haversine-Formel zu, die ein präziseres Modell zur Darstellung der Erdform enthält. Diese Formel berücksichtigt explizit den Abstand und den Höhenunterschied zwischen den beiden Punkten:
<code class="java">public static double distance(double lat1, double lat2, double lon1, double lon2, double el1, double el2) { final int R = 6371; // Radius of the earth double latDistance = Math.toRadians(lat2 - lat1); double lonDistance = Math.toRadians(lon2 - lon1); double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double distance = R * c * 1000; // convert to meters double height = el1 - el2; distance = Math.pow(distance, 2) + Math.pow(height, 2); return Math.sqrt(distance); }</code>
Diese Formel bietet eine genauere Darstellung des Abstands und ist daher für Anwendungen wertvoll, die präzise geografische Berechnungen erfordern.
Das obige ist der detaillierte Inhalt vonWie berechnet man die Entfernung zwischen zwei Punkten auf der Erde anhand der Breiten- und Längengrade?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!