tutorials.de Buch-Aktion 05/2012
Seite 1 von 3 123 LetzteLetzte
Like Tree3Danke
ERLEDIGT
JA
ANTWORTEN
34
ZUGRIFFE
947
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Nessus Nessus ist offline Mitglied Bronze
    Registriert seit
    Feb 2003
    Ort
    Speyer
    Beiträge
    45
    Hallo,

    ich experimentiere gerade mit der OpenGeoDB und mich würde eine Entfernungsberechnung interessieren, die Genauigkeit ist zweitrangig. Leider sind ja die Beispielscripte nicht mehr zu erreichen.
    Hat noch jemand einen Link dazu, bzw. ein passendes Beispielscript?

    Wäre super, vielen Dank
     

  2. #2
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    Hi

    wenn du die OpenGeoDB nur für Entfernungsberechnung brauchst,
    würde ich als Erstes alle überlüssigen Daten rausschmeißen.
    Hab dafür (eventuell) für dich passende SQLs, die keine weiteren Änderungen mehr brauchen.
    Tut nicht nur dem Speicherverbrauch, sondern vA. der Geschwindigkeit gut.

    Auf welcher Ebene willst du den die Entferungsberechnung?
    Nur zw. Orten oder auch "Unter"-Ortschaften/Straßen etc.?
    (Straßen usw. sind sehr sehr lückenhaft, würde dringend nur Orte nehmen.
    Kommt nur immer auf den Sinn der Entfernungsberechnung an...)

    Kann dir dann dafür genaue SQLs etc. geben, auch PHP-Entfernungsberechnung...
    aber zuerst das.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    Nessus Nessus ist offline Mitglied Bronze
    Registriert seit
    Feb 2003
    Ort
    Speyer
    Beiträge
    45
    Hallo,

    danke für die Info, es ist vollkommend ausreichend dies über die PLZ zu machen
     

  4. #4
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    Also nur Orte. Gut.
    Das Ganze nur für D oder auch andere Länder?
    (Müssen nämlich getrennt behandelt werden, aufgrund fehlender Landesid).
    Hast du schon irgendwas in eine DB gezogen? Falls ja, Was in welcher Reihenfolge?
    Ist deine "Entwicklungs-DB" lokal am Rechner oder woanders übers Netzwerk?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  5. #5
    Nessus Nessus ist offline Mitglied Bronze
    Registriert seit
    Feb 2003
    Ort
    Speyer
    Beiträge
    45
    Lediglich für D, das reicht.
    Das ist auf einem Entwicklungsrechner
     

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    OpenGeoDB hat ja auch Latitude- und Longitude-Angaben, wenn ich mich richtig erinnere. Hier hast du eine Formel, wie du damit Distanzen berechnen kannst:

    http://www.tutorials.de/php/377874-d...ml#post1954866
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  7. #7
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    So, letzt Frage zurückgezogen.
    (Grund war: Falls man auf PHPMyAdmin oder so angewiesen ist,
    ist es mit der OpenGeoDB etwas tricky. Direktzugriff lokal oder per SSH
    macht die Sache viel einfacher.)

    Ist deswegen überflüssig, weil du den ganzen Extrahierprozess nicht machen musst.
    Für Ortsweites Zeug hab ich nämlich schon eine fertig gepackte Tabelle,
    kann ich dir geben. Hab mich erst jetzt erinnert...

    Ist max. ein Monat alt, also (falls inzwischen neue Eintrage gekommen sind)
    noch ziemlich vollständig.

    Ist für D, A und CH.
    Die nicht gebrauchten Ländern kann man bei Bedarf
    mit einem einfachen delete-where löschen.

    Ist MySQL.

    So...muss nur kurz Zugangsdaten suchen und Exportieren,
    häng dann einen SQL-Dump hier dran.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  8. #8
    Nessus Nessus ist offline Mitglied Bronze
    Registriert seit
    Feb 2003
    Ort
    Speyer
    Beiträge
    45
    Hey, vielen Dank.
    Diese kleine Sache soll aber dann auf einem Webspace laufen......
    Sorry für diese Fehlinfo.
     

  9. #9
    Kyôya Kyôya ist offline Mitglied Silber
    Registriert seit
    Nov 2011
    Ort
    Würzburg
    Beiträge
    62
    Hi,

    ich habe ein wenig Bauchschmerzen bei diesem Thema. Willst du nur eine reine Entfernungsberechnung vornehmen oder soll das eine Grundlage zu einer Umkreissuche werden?

    Gruß Kyôya Stefan
     
    Oracle Certified MySQL 5 Professional Developer
    Zend Certified PHP 5.3 Engineer

    Vorträge, Webinare, etc im Mayflower - Blog

  10. #10
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    Webspace: Das macht nichts.
    Nur das "Zusammenschrumpfen" auf die benötigten Daten
    ist mit PHPMyAdmin etwas umständlich.
    Aber eben das brauchst du nicht mehr amchen, hab ich vor 3 Wochen auch schon.

    Ergebnis kommt in 1 Minute...

    @Kyoya: Beides möglich, beides schon erfolgreich und nicht zu langsam gemacht.
    Warum Bauchschmerzen?

    edit2:
    Anhang
    Angehängte Dateien Angehängte Dateien
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  11. #11
    Kyôya Kyôya ist offline Mitglied Silber
    Registriert seit
    Nov 2011
    Ort
    Würzburg
    Beiträge
    62
    Naja MySQL muss bei einer Umkreissuche für jeden einzelnen Datensatz die Entfernung berechnen und kann dabei nicht auf Indizies zurückgreifen. Das macht das ganze schon recht langsam.
    Bauchschmerzen deshalb, da ich selbst schon mal eine Umkreissuche realisieren durfte. Ich empfehle für diesen Zweck den Apache Solr, dort ist die Umkreissuche ab Version 3.1 nativ enthalten und ab Version 4 gibt er auch die Entfernung zurück. Leider braucht er einen Java-Servlet-Container und somit ist seine Verwendung doch recht eingeschränkt.

    Gruß Kyôya Stefan
    Geändert von Kyôya (24.11.11 um 21:18 Uhr)
     
    Oracle Certified MySQL 5 Professional Developer
    Zend Certified PHP 5.3 Engineer

    Vorträge, Webinare, etc im Mayflower - Blog

  12. #12
    Nessus Nessus ist offline Mitglied Bronze
    Registriert seit
    Feb 2003
    Ort
    Speyer
    Beiträge
    45
    @sheel

    Danke für den Dump, hättest du jetzt noch ein Beispiel?
    Das wäre suuuuuper

    @All:
    Vielen Dank für die Hilfe
     

  13. #13
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    @Beide:
    Stimmt, nur MySQL Trion.-und Wuzel- und alle Berechnungen zu überlassen
    ist langsam.
    Aber man muss ja nicht alles SQL-mäßig machen.
    Hab verschiedene Kombinationsstufen mit PHP ausprobiert
    und auf akzeptable Ergebisse gekommen.

    Nessus, was brauchst du denn genau?
    Entfernung oder Umkreissuche?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  14. #14
    Nessus Nessus ist offline Mitglied Bronze
    Registriert seit
    Feb 2003
    Ort
    Speyer
    Beiträge
    45
    Entfernungssuche wäre super
     

  15. #15
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    Also Umkreissuche.

    Natürlich nur Beispiel,
    Im Realen noch SQL-Injections etc. verhindern usw.
    (Falls die Daten aus HTML-Forms kommen)...

    PHP-Code:
    <?php
    $username
    ='db-user'//Anpassen
    $password='db-pw'//Anpassen
    $database='db-con'//Anpassen

    //Beispiel fuer den Ausgangsort
    //Woher die Daten kommen ist natuerlich egal (Form, GET/POST etc.)
    $startortname='Klagenfurt';
    $startortplz='9020'//Klagenfurt hat mehrere PLZs, deshalb festgelegt
    $startortstaat='AT'//DE, AT, CH

    //Orte in ... km Umkreis (Luftlinie) finden
    $radius 40;



    //Beispiel zum DB-Verbindung herstellen und Ausgeben zutreffenden aller Orte



    mysql_connect(localhost,$username,$password) or die('CON!');
    mysql_select_db($database) or die('SELDB!');

    //Startort-Position ermitteln
    $query='select lat,lon from orte where plz='.$startortplz.' and staat='.$startortstaat.' and name='.$startortname;
    $res=mysql_query($query);

    //TODO: Eventuell noch ueberpruefen, ob die Query ueberhaupt ein Ergebnis hat

    $row=mysql_fetch_array($res);
    $lat $row[0];
    $lon $row[1];


    $query='select staat,plz,name,lat,lon from orte where ('.$radius.'/111.3)>=abs(lat-'.$lat.') order by 1,2,3';
    $res=mysql_query($query);

    while(
    $row=mysql_fetch_array($res))
    {
      
    $x sqrt
      
    (
       (
    111.3*cos(($lat+$row[3])/2*0.01745)*($lon-$row[4]))*
       (
    111.3*cos(($lat+$row[3])/2*0.01745)*($lon-$row[4]))
       +
       (
    111.3*($lat-$row[3]))*
       (
    111.3*($lat-$row[3]))
      );

      if(
    $radius>= $x)
      {
        
    //Das mit allen zutreffenden Orten machen
        //Hier einfache Ausgabe von Staat, PLZ, Ortsname, und Entfernung in km
        
    echo $row[0].' '.$row[1].' '.$row[2].', '.((int)$x).'km<br>';
      }
    }

    mysql_close();
    ?>
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

Ähnliche Themen

  1. OpenGeodb mit php einlesen
    Von Xching im Forum PHP
    Antworten: 3
    Letzter Beitrag: 26.11.10, 23:13
  2. opengeodb import
    Von versuch13 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 08.01.08, 12:09
  3. frage zu opengeodb plz
    Von pikus im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 11.06.07, 14:39
  4. Noch mal OpenGeoDB
    Von illetuffi im Forum PHP
    Antworten: 3
    Letzter Beitrag: 22.12.06, 17:00
  5. OpenGeoDB Installieren?
    Von illetuffi im Forum PHP
    Antworten: 5
    Letzter Beitrag: 21.12.06, 08:42