Dann liegt es entweder an der Konfiguration, oder es dauert einfach ne Zeit, bis die Queries alle ausgeführt wurden.
Berechnung der Entfernung zwischen zwei PLZ
Einklappen
X
-
Original geschrieben von Hopka
Dann liegt es entweder an der Konfiguration, oder es dauert einfach ne Zeit, bis die Queries alle ausgeführt wurden.
server nicht gefunden kommt da soll mir aber eigentlich jetzt auch wurscht sein
Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
sondern mit den Augen das Manual zu lesen.
Kommentar
-
Hallo Leute,
verfolge diese Diskussion seit langem, und da ich auch so ein Feature auf meiner Seite haben wollte, aber nicht so kompliziert wie mit GeoClass, habe ich eine kleine Funktionssammlung "plz.php" geschrieben, die kinderleicht mittels require() von überall eingebunden werden kann und die wichtigsten Befehle bereitstellt:
PHP-Code:// liefert alle Postleitzahlen zu einem Ort in einem array zurueck
// Parameter: String $ort
// Returns: array
function plzGetPLZ($ort)
// liefert alle Ortsnamen zu einer PLZ in einem array zurueck (z.B. auch Ortsname:Stadtteilname)
// Parameter: Int $plz
// Returns: array
function plzGetOrt($plz)
// liefert die Distanz zwischen zwei PLZ in km zurueck.
// Vorsicht: Es ist die Luftlinie gemeint, nicht die Strassenentfernung!
// Parameter: Int $plz1, Int $plz2
// Returns: float
function plzGetDistanceBetween($plz1, $plz2)
// liefert alle PLZ in definierbarem Umkreis um eine PLZ in einem array zurueck
// Parameter: Int $plz (Zentrum der Betrachtung), float $distance (Umkreisradius in km)
// Returns: array
function plzGetAllPLZNear($plz, $distance)
Benötigt wird lediglich die aktuellste Version der openGeoDB, die wie bekannt unter http://opengeodb.de/ erhältlich ist.
Über Feedback und Verbesserungsvorschläge würde ich mich freuen!Angehängte DateienZuletzt geändert von zissakos; 08.06.2004, 02:14.
Kommentar
-
hallo zissakos,
ich verfolge diese diskussionsrunde auch schon seit längeren gespannt.
ich finde deine funktion ist ganz nützlich, danke dir!
nur haben sich in irgendeiner art einige fehler eingeschlichen.
// liefert alle PLZ in definierbarem Umkreis um eine PLZ in einem array zurueck
// Parameter: Int $plz (Zentrum der Betrachtung), float $distance (Umkreisradius in km)
// Returns: array
function plzGetAllPLZNear($plz, $distance)
außerdem tritt ein rundungsfehler auf. auch wenn man die entfernung von ein und derselben plz habne will tritt die zahl 0.000095 auf.
ansonsten finde ich das script aber gut.
so, das war mein feedback dazu. ich hoffe, dass du damit etwas anfangen kannst und dass du den fehler schnell findest.
Kommentar
-
und nu?
Hi Leute.
Ich baue grade eine Community auf, bei der ein Feature eine Map mit den Mitgliedern sein soll, die da als farbig markierte Punkte eingetragen werden.
Schön und gut... es war ja schon nen krampf die opengeodb-0.2.3c-UTF8-mysql.sql mit ihren fast 25MB größe in die Datenbank zu prügeln aber was nu? ich hab absolut keine ahnung wie ich nun weiter machen soll. Kenn jemant Pages mit Codeschnipseln, die einem als Denkanstoß dienen könnten? Oder hat jemand selber was im angeboht?
Danke vorab
Gruß Christian
*edit*
noch nen paar beispiele wie ich das meine:
http://www.tolkienforum.de/stuff/usermap/
http://www.chaga.de/Geo/n/karte.html
http://www.seat-toledo.de/cms/profile_all.php
http://www.buha.info/people/map.phpZuletzt geändert von ChristianM.; 14.07.2005, 05:52.Wer immer nur tut was er kann lernt nie was neues.
Kommentar
-
hast Du denn die GeoClass schon? Ist doch genau dafür gemacht...
https://sourceforge.net/project/show...group_id=87652
Kommentar
-
Also ich habe das folgendermaßen gemacht:
1. ich habe die opengeodb verwendet, um die GPS-Koordinaten zu den PLZ herauszufinde. (Du kannst eine ganze Menge Felder löschen, das macht dein Skript schneller)
2. Dann habe ich ein bischen geformelt, aber leider komm ich gerade nicht mehr an den Code ran. Musst das hier einfach noch in eine Funktion packen und fertig ist die PapekisteWenn die Tatsachen nicht mit der Theorie übereinstimmen –
um so schlimmer für die Tatsachen.
Kommentar
-
hab doch was gefunden bei mir - ist aber nur ein kleiner Schnipsel...
PHP-Code:
$zweite_breite = $array[0]['lat']; // lat aus der datebank
$zweite_laenge = $array[0]['lon']; // lon aus der datenbank
$zweite_breite_rad = deg2rad($zweite_breite);
$zweite_laenge_rad = deg2rad($zweite_laenge);
// das gleiche noch für einen ersten Ort...
$welt = 6378.137;
$entfernung = acos((sin($erste_breite_rad) * sin($zweite_breite_rad)) + (cos($erste_breite_rad) * cos($zweite_breite_rad) * cos($erste_laenge_rad - $zweite_laenge_rad))) * $welt;
$entfernung = round($entfernung);
Zuletzt geändert von fragen; 17.07.2005, 09:47.
Kommentar
-
Probleme mit der Sortierung
Ich habe die Funktion von zissakos mal eingebaut aber leider werden die ausgaben nicht in der richtigen reihenfolge ausgegeben. d.h. es wird nicht nach entfernung sortiert.
Wobei das aber in der funktion vorgesehen ist ORDER by e ASC
hier mein geänderter code
PHP-Code:// liefert alle PLZ in definierbarem Umkreis um eine PLZ in einem array zurueck. Dieses hat als Index immer die PLZ und
// als Wert die Entfernung zum Zentrum der Betrachtung
// Parameter: Int $plz (Zentrum der Betrachtung), float $distance (Umkreisradius in km)
// Returns: array
function plzGetAllPLZNear($plz, $distance) {
global $plz_erdradius;
$db = connect_db();
$query = 'SELECT * FROM geodb_locations WHERE plz LIKE "%'.$plz.'%" AND typ=6';
$results = mysql_query ($query,$db) or mysql_die();
$erg = array();
while ($item = mysql_fetch_object($results)) {
$latitudeRad = deg2rad($item->breite);
$longitudeRad = deg2rad($item->laenge);
$formula = "IFNULL((ACOS((SIN($latitudeRad)*SIN(RADIANS(breite))) + (COS($latitudeRad)*COS(RADIANS(breite))*COS(RADIANS(laenge)-$longitudeRad))) * $plz_erdradius),0)";
$query = "SELECT *, $formula AS e FROM geodb_locations WHERE $formula < $distance ORDER BY e ASC";
$results2 = mysql_query ($query,$db) or mysql_die();
while ($item2 = mysql_fetch_object($results2)) {
//foreach(explode(",",$item2->plz) as $p) array_push($erg,$p);
foreach(explode(",",$item2->plz) as $p) $erg[$p]=$item2->e;
}
}
$erg = array_unique($erg);
asort($erg);
return $erg;
}
Kommentar
Kommentar