-
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
-
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, ...?
-
Hallo,
danke für die Info, es ist vollkommend ausreichend dies über die PLZ zu machen
-
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, ...?
-
Lediglich für D, das reicht.
Das ist auf einem Entwicklungsrechner
-
24.11.11 20:49 #6
- 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#post1954866Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
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, ...?
-
Hey, vielen Dank.
Diese kleine Sache soll aber dann auf einem Webspace laufen......
Sorry für diese Fehlinfo.
-
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 StefanOracle Certified MySQL 5 Professional Developer
Zend Certified PHP 5.3 Engineer
Vorträge, Webinare, etc im Mayflower - Blog
-
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:
AnhangNetiquette (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, ...?
-
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 StefanGeä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
-
@sheel
Danke für den Dump, hättest du jetzt noch ein Beispiel?
Das wäre suuuuuper
@All:
Vielen Dank für die Hilfe
-
@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, ...?
-
Entfernungssuche wäre super
-
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
-
OpenGeodb mit php einlesen
Von Xching im Forum PHPAntworten: 3Letzter Beitrag: 26.11.10, 23:13 -
opengeodb import
Von versuch13 im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 08.01.08, 12:09 -
frage zu opengeodb plz
Von pikus im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 11.06.07, 14:39 -
Noch mal OpenGeoDB
Von illetuffi im Forum PHPAntworten: 3Letzter Beitrag: 22.12.06, 17:00 -
OpenGeoDB Installieren?
Von illetuffi im Forum PHPAntworten: 5Letzter Beitrag: 21.12.06, 08:42



3Danke

Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren