Die Berechnung Abstand zwischen Postleitzahlen in PHP
Frage
packte ich eine Datenbank der Postleitzahlen und ihre langitudes / Breiten, etc. von dieser Diese Seite . Es hat die folgenden Felder:
ZIP, Breite, Länge, Stadt, Staat, Landkreis ZIP_CLASS
Die Daten werden in einer Textdatei, aber ich es in eine MySQL-Tabelle eingefügt. Meine Frage ist nun, wie kann ich die Felder oben verwenden, um den Abstand zwischen zwei Postleitzahlen zu berechnen, die ein Benutzer auf der Website eingeben? Arbeits Code in PHP wird verstehen,
Lösung
Sie können auch versuchen, einen Web-Service schlagen den Abstand ber. Lassen Sie jemand anderes schweres Heben tun.
Andere Tipps
Dies ist die Antwort von mike mit einigen Anmerkungen für die magischen Zahlen . Es schien für rel="noreferrer">:
function calc_distance($point1, $point2)
{
$radius = 3958; // Earth's radius (miles)
$deg_per_rad = 57.29578; // Number of degrees/radian (for conversion)
$distance = ($radius * pi() * sqrt(
($point1['lat'] - $point2['lat'])
* ($point1['lat'] - $point2['lat'])
+ cos($point1['lat'] / $deg_per_rad) // Convert these to
* cos($point2['lat'] / $deg_per_rad) // radians for cos()
* ($point1['long'] - $point2['long'])
* ($point1['long'] - $point2['long'])
) / 180);
return $distance; // Returned using the units used for $radius.
}
Es kann mit nur Mathe getan werden ...
function calc_distance($point1, $point2)
{
$distance = (3958 * 3.1415926 * sqrt(
($point1['lat'] - $point2['lat'])
* ($point1['lat'] - $point2['lat'])
+ cos($point1['lat'] / 57.29578)
* cos($point2['lat'] / 57.29578)
* ($point1['long'] - $point2['long'])
* ($point1['long'] - $point2['long'])
) / 180);
return $distance;
}
Überprüfen Sie die Haversine Formel für Großkreis Entfernungen zwischen zwei Punkten zu berechnen. Einige weitere Proben können hier werden
Haversine Formel:
- R = Erdradius (mittlerer Radius = 6,371km)
- Δlat = lat2- LAT1
- Δlong = long2- Long1
- a = sin² (Δlat / 2) + cos (LAT1) · cos (LAT2) .sin² (Δlong / 2)
- C = 2.atan2 (√a, √ (1-a))
- d = R. C
(Beachten Sie, dass Winkel in Radiant sein müssen passieren Funktionen trig).
In der ZIP-Tabelle müssen Sie die Koordinaten greifen (lat, long) für die beiden Punkte, für die Sie den Abstand bekommen.
Sie können dann entweder die Entfernung direkt in den SQL oder mit PHP berechnen. Beide Verfahren sind in diesem Beitrag beschrieben:
Die Berechnung in dem Beispiel auf der Formel basiert bereits in diesem Thread diskutiert. Es bietet den Radius für die Erde in beiden Meilen und Kilometer so ermöglicht es Ihnen, den Abstand zwischen zwei Punkten in den beiden Einheiten zu erhalten.
Der Link oben ist groß, weil das Verfahren zur Berechnung beinhaltet keine magischen Zahlen, nur den Radius der Erde!