GeoNames Home | Postal Codes | Download / Webservice | About 

GeoNames Forum
  [Search] Search   [Recent Topics] Recent Topics   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Anleitung zum Erstellen einer Umkreissuche...  XML
Forum Index -> Forum in Deutsch
Author Message
Detlef



Joined: 11/02/2009 09:42:17
Messages: 4
Offline

Hallo zusammen,

über die Suche nach OpenGeoDB bin ich hier gelandet
und möchte fragen, ob es eine Anleitung zu einer
PLZ-Umkreissuche gibt.

Viele Grüße
Detlef



marc



Joined: 08/12/2005 07:39:47
Messages: 4412
Offline

Hallo Detlef

Im Detail hängt es davon ab, welche Datenbank du verwendest. Im forum hat es zahlreiche Diskussionen. Zum Beispiel hier:
http://forum.geonames.org/gforum/posts/list/692.page

Gruss

Marc

[WWW]
Detlef



Joined: 11/02/2009 09:42:17
Messages: 4
Offline

Hallo Marc,

ich bin mir eigentlich noch gar nicht im Klaren, welche db ich benutzen
möche/soll. Ich habe hier eine db mit etwas über 1000 Händler, in
welcher zu jedem Händler auch dessen PLZ eingetrage ist.

Mir ist auch noch nicht klar, wie ich grundsätzlich vorgehen soll.

Die Entfernung kann ja nur berechnet werden, wenn latitude und
longitude zu den Postleitzahlen bekannt ist.

Um die Berechnung auf dem eigenen Server durchführen zu können,
gibt es dazu die db von OpenGeoDB oder von GeoNames um den Postleitzahlen der Händerl die geographischen Koordinaten zuordnen
zu können.

Das Ergebnis der Berechnung, z. B. fünf Händer im Bereich um die
gesuchte PLZ wird dann mit Hilfe der google-maps-api weiter-
verarbeitet und graphisch ausgegeben.

Das ganze wird so gemacht, weil man nicht 1000 Anfragen an
google-maps schicken kann, um die geographischen Koordinaten
seiner Händler abzufragen.

Ist das soweit richtig, oder bin ich auf dem Holzweg...?

Vom Prinzip her möchte ich sowas in der Art erstellen,
wobei mir die reine PLZ-Suche reicht:
http://www.revell.de/de/produkte/modellbau/service/handlersuche/index.html

Kann man eigentlich auch die tatsächlichen Straßenkilometer
abfragen?

Bei einer Berechnung von 89278 nach 89312 sind es per Lunftlinie
12,8 km. Laut http://maps.google.de/ und dessen Routenberechnung
sind es 19,8 gefahrene Kilometer. Ist ja doch ein ganz netter Unterschied.


Viele Grüße!
Detlef



Detlef



Joined: 11/02/2009 09:42:17
Messages: 4
Offline

Ich habe mir gerade die DE.zip von hier heruntergeladen:
http://download.geonames.org/export/zip/

Beim Import in meine db erhalte ich diese Fehlermeldung:

Code:
 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Sep); INSERT INTO `plz_de` (`land`,`plz`,`ort`,`bland`,`abland`,`landkreis`,`lo' at line 1 (1064)  -  INSERT INTO `plz_de` (`land`,`plz`,`ort`,`bland`,`abland`,`landkreis`,`longitude`,`latitude`) VALUES ('DE','1945','Hermsdorf','Brandenburg','BB','Landkreis Oberspreewald-Lausitz',514.167,13. Sep);
 


Wieso steht denn da ein Datum (13. Sep), wo eigentlich eine Geokoordinate hingehört? Das kommt übrigens sehr oft in
der Datei vor.

Viele Grüße
Detlef

Detlef



Joined: 11/02/2009 09:42:17
Messages: 4
Offline

Das mit dem Datumsangabe ist Unfug.
Das hat Excel beim Export nach csv gemacht.

Nun ist es so, daß nach dem Import der Daten die Umlaute
z. B. so dargestellt werden: Großräschen

Charakter Set der db ist utf8

Was mache ich falsch?

Viele Grüße, Detlef
gary



Joined: 22/02/2009 18:03:13
Messages: 3
Offline

Hallo Detlef,

du hast genau zwei Probleme, die dich nicht wirklich gut mit den Daten umgehen lassen: Excel und Windows. Beides brauchst du nicht wirklich, um die Daten in deine Datenbank zu schieben:
- Excel mag kein UTF-8. Meistens wird mit Windows-1252 gespeichert. Ob man das anders einstellen kann, kann ich nicht sagen.
- Windows mag auch kein UTF-8. Ein Umweg wäre ein Editor, der damit umgehen kann.

Außerdem weiß ich nicht, warum du die Daten überhaupt irgendwie speichern/konvertieren willst, wo sie doch bereits im CSV-Format vorliegen (sie sind halt mit Tabulator getrennt, nicht mit ',' oder ';' - siehe readme.txt)!

Alles was du brauchst ist eine Importroutine, die UTF-8 kann. D.h. insbesondere auch, dass es nichts bringt, wenn UTF in der Datei steht und die Datenbank auf UTF-8 eingestellt ist, wenn über die Verbindung zur Datenbank kein UTF-8 geschickt wird.

Ich habe die DE.txt gerade mittels phpMyAdmin auf meinem Server importiert und das hat ganz wunderbar funktioniert - keine Probleme mit Umlauten etc.

Die Umkreissuche ist nicht ganz trivial. Aber es gibt einige gute Skripte, die du höchstens leicht anpassen musst oder ggf. in eine Programmiersprache deiner Wahl übersetzen müsstest. Aber wenn du die Google-API verwendest, ist das ja das reinste Zuckerschlecken

Viele Grüße aus Frankfurt,

Gary
Bulli95



Joined: 10/03/2009 12:53:38
Messages: 3
Offline

Ich muss noch mal nachfragen. Möchte gern eine Umkreissuche realisieren, aber der Weg dorthin ist mir noch nicht ganz klar. Hat evtl. jmd. eine Step by Step Anleitung?
Mir ist auch noch nicht klar, ob ich nun Google Map Api nehme oder was anderes. Da gibt es irgendwie nie eindeutige Aussagen.
Ziel soll es sein, dass besucher auf meiner Webseite Filialien angezeigt bekommen die in der Nähe einer eingegebenen Postleitzahl liegen.
Danke!
gary



Joined: 22/02/2009 18:03:13
Messages: 3
Offline

Hallo,

gerne hier eine kurze Anleitung:

a) ich habe die Daten wie beschrieben mittels phpMyAdmin und dem Spaltentrenner "\t" in eine frische Datenbank importiert - das hat reibungslos funktioniert. Dann hat man die Daten schonmal im Zugriff und

b) der Rest ist reines SQL. Zunächst wollte ich die Entfernung (Luftlinie) zwischen meinem Vater und mir (nur ein Beispiel). Dazu habe ich die angegebenen Koordinaten aus der Datenbank genutzt. Jetzt ist es aber so, dass die Erde kein Ball ist, sondern etwas platter. Daher müssen die Werte der Latitude (X-Achse) etwas mehr gestreckt werden (Faktor 69,1) als die der Longitude (Y-Achse) (Faktor 53). Die Distanz ist dann zunächst der Pythagoras über die X- und Y-Differenzen. Damit hat man ein Ergebnis in Seemeilen, glaube ich. Um in Kilometer umzurechnen, benötigt's nochmal nen Faktor von so ungefähr 1,609563462 (hab ich damals irgendwie ausgerechnet, weiß nicht mehr genau) und schon hat man Kilometer. Eine Abfrage könnte also beispielsweise so aussehen:
Code:
SELECT ROUND( 1.609563462 * SQRT( X * X + Y * Y ) ) Distance
 FROM
   (SELECT
     69.1 * (frankfurt.Latitude - langgoens.Latitude) AS X,
     53.0 * (frankfurt.Longitude - langgoens.Longitude) AS Y
   FROM
     (SELECT Latitude, Longitude FROM ZipCodes WHERE PostalCode = '60439') AS frankfurt,
     (SELECT Latitude, Longitude FROM ZipCodes WHERE PostalCode = '35428') AS langgoens
   ) AS distances


c) Aber was fehlt jetzt? Hier sind beide Punkte quasi fix drin. Das kann mittels Subselect erweitert werden zu z.B.
Code:
SELECT *
 FROM
   (SELECT CountryCode, PostalCode, ROUND( 1.609563462 * SQRT( X * X + Y * Y ) ) Distance
   FROM
     (SELECT
       69.1 * (other.Latitude - origin.Latitude) AS X,
       53.0 * (other.Longitude - origin.Longitude) AS Y,
       other.CountryCode,
       other.PostalCode
     FROM
       (SELECT Longitude, Latitude FROM ZipCodes WHERE CountryCode = 'DE' AND PostalCode = '60439') origin,
       ZipCodes other
     ) AS distances
   ) circumcicle
 WHERE
   Distance <= 20
 ORDER BY Distance, CountryCode, PostalCode
 


Wie zu sehen ist, wird hier aktuell nur Land/PLZ/Distanz zum Fixpunkt ausgegeben und könnte entsprechend erweitert werden (Name des Ortes z.B.). Und wenn man diese Werte eh schon hat, kann man auch danach filtern (WHERE) und sortieren (ORDER BY).

Ich habe das ganze auch mal im Hinblick auf ein Kundenprojekt niedergeschrieben. Im Hintergrund wie gesagt MySQL und zur Aufbereitung ganz simples PHP.

http://geo.rollerbed.de/

Ich habe übrigens nicht vor, diese Seite lange existieren zu lassen. Kann also gut sein, dass sie irgendwann wieder weg ist.

Viele Grüße,

Gary
Bulli95



Joined: 10/03/2009 12:53:38
Messages: 3
Offline

Vielen Dank gary,

aber das mit dem Import ist mir noch nicht klar. Ich habe eine Datei de.txt und mit dieser muss ich ja irgendwas anfangen. Bestehende Tabellenstruktur oder wie auch immer. Es muss doch klar sein wohin er die Daten schreiben soll. Oder habe ich die falsche de.txt?
gary



Joined: 22/02/2009 18:03:13
Messages: 3
Offline

Nein, du hast genau die richten Daten. Du musst aber natürlich erst ne Tabelle anlegen! Das kommt jetzt ganz drauf an, mit welcher Datenbank du arbeitest (MySQL, Oracle, Access, Postgres, ...). Welche Spalten die Tabelle haben muss, steht in der Readme-Datei in des Archivs, aus dem du auch die de.txt hast.
Beispiel, um eine passende Tabelle in MySQL wie in meinem Fall anzulegen:
Code:
CREATE TABLE ZipCodes (
   CountryCode char(2) character set utf8 NOT NULL,
   PostalCode varchar(10) character set utf8 NOT NULL,
   PlaceName varchar(180) character set utf8 NOT NULL,
   AdminName1 varchar(100) character set utf8 NOT NULL,
   AdminCode1 varchar(20) character set utf8 NOT NULL,
   AdminName2 varchar(100) character set utf8 NOT NULL,
   AdminCode2 varchar(20) character set utf8 NOT NULL,
   AdminName3 varchar(100) character set utf8 NOT NULL,
   Latitude double(7,4) NOT NULL,
   Longitude double(7,4) NOT NULL,
   Accuracy int(1) NOT NULL
 ) ENGINE=MyISAM;

Da die Tabelle genausoviele Spalten hat wie die DE.txt durch Tabulator getrennte Spalten, passen die Zeilen genau rein. Wenn du dann irgendwas nicht benötigst, kannst du dann die betreffende Spalte(n) einfach wieder löschen (z.B. mit "ALTER TABLE ZipCodes DROP COLUMN Accuracy", falls du letztere nicht brauchst).

Viele Grüße,

Gary
Bulli95



Joined: 10/03/2009 12:53:38
Messages: 3
Offline

Danke, jetzt geht es auch.
Hatte wirklich ne Spalte zuviel und den Import über"CSV mit LOAD DATA" statt nur CSV gemacht. Nun kann ich mich mal daran versuchen, das mir Filialen in der Umgebung einer eingegebenen PLZ angezeigt werden. Hier war ja das Beispiel mit ner Berechnung der Distanz zwischen 2 Orten.
gmuend



Joined: 24/05/2010 12:34:45
Messages: 15
Offline

Danke!
[WWW]
 
Forum Index -> Forum in Deutsch
Go to:   
Powered by JForum 2.1.5 © JForum Team