PLZ Umkreissuche in PHP
Hallo,
nachdem ich die letzten Tage wenig neues veröffentlicht habe, heute mal etwas interessantes für den ambitionierten PHP Programmierer.
Eine PLZ Umkreissuche in PHP, dazu benötigen wir:
- Eine Geo DB mit Long und LAT sowie PLZ (am besten von opengeodb auf sourceforge)
- Einen brauchbaren Umkreissuchen-Script
- Etwas Zeit
Bei meinen Versuchen hat sich herausgestellt, dass ich die meiste Zeit damit verbracht habe, eine brauchbare Datenbank zu finden und zu formatieren. Hilfe dazu weiter unten, jetzt erstmal etwas Code:
Code
<?
// Zuerst eine Verbindung zur Datenbank aufbauen!
$connect=@mysql_connect("localhost", "user", "pass")
or die("Cant connect to Database");
@mysql_select_db("geo_plz", $connect)or die("Cant select Database");
// die PLZ nach der wir suchen
$plz = '9220';
// der Umkreis in Km
$umkreis = 5;
// Erdradius (geozentrischer Mittelwert) in Km
$radius = 6368;
/* -------------------------- */
$sql_rad = mysql_query("SELECT lon, lat FROM `plz_at` WHERE `plz` = '$plz' ");
$erg_rad = mysql_fetch_object($sql_rad);
// Umrechnung von GRAD IN RAD
$lon = $erg_rad->lon / 180 * M_PI;
$lat = $erg_rad->lat / 180 * M_PI;
// jetzt erfolgt die eigentliche Abfrage
$query = "SELECT ort, plz, (
".$radius." * SQRT(2*(1-cos(RADIANS(lat)) *
cos(".$lat.") * (sin(RADIANS(lon)) *
sin(".$lon.") + cos(RADIANS(lon)) *
cos(".$lon.")) - sin(RADIANS(lat)) * sin(".$lat.")))) AS Distance
FROM plz_at WHERE
".$radius." * SQRT(2*(1-cos(RADIANS(lat)) *
cos(".$lat.") * (sin(RADIANS(lon)) *
sin(".$lon.") + cos(RADIANS(lon)) *
cos(".$lon.")) - sin(RADIANS(lat)) * sin(".$lat."))) <= ".$umkreis."
ORDER BY Distance
";
// die Ausgabe (vereinfacht)
$sql = mysql_query($query);
while( $erg = mysql_fetch_object($sql) ) {
echo '
<pre>', print_r($erg), '</pre>
';
}
?>
Natürlich wäre es jetzt denkbar für jede gefundene PLZ im Umkreis eine Abfrage der Mitglieder oder Filialen zu machen, diesen Spass überlasse ich aber lieber euch :)
Wer die formatierte Datenbank für Deutschland, Österreich und Schweiz braucht oder eine Frage hat, einfach kurz melden.
LG
Andreas
Eine wichtige Adresse die beim Erstellen der Datenbank sowie der Gestaltung der Abfrage hilfreich ist lautet:
http://opengeodb.giswiki.org/wiki/OpenGeoDB_-_Umkreissuche
[UPDATE]
Ich habe die Datenbank online gestellt, übernehme aber keine Garantie für Vollständigkeit und Richtigkeit.
http://www.codejungle.org/code/zip.sql.gz
2008-08-03 21:11:34
|
Hallo Oliver,
sorry das ich dir erst jetzt schreibe,
wenn du noch intresse hast, schicke ich dir gerne die datenbank.
lg
andreas
Hi.. wäre klasse wenn ich die Geo-Datenbank für Deutschland, Österreich und Schweiz von dir bekommen könnte.
Danke und Gruss
Oliver















