TYPO3-Browser: PLZ / Umkreissuche / Geodaten / OpenGeoDB
| Autor | Nachricht |
|---|---|
|
Verfasst am: 25. 03. 2011 [13:06]
|
|
|
igorshmigor
Pascal Collins
Themenersteller
Dabei seit: 24.03.2011
Beiträge: 9
|
Hallo, ich bin gerade dabei, eine Umkreissuche umzusetzen. Noch ist die Lösung Quick'n'Dirty (noch keine Validierung der PLZ, keine Fehlermeldung bei ungültiger PLZ-Eingabe), aber immerhin, es funktioniert. Für eine Arztsuche nutze ich tt_address. tt_address wurde so erweitert, dass auch Längen- und Breitengrad der Adresse hinterlegt sind und zwar in den Feldern tx_rggooglemap_lng und tx_rggooglemap_lat. Die Werte für diese Felder kann man mit Hilfe einer Look-Up Tabelle ermitteln, welche zu jeder PLZ die dazugehörigen Geodaten enthält. Diese Look-Up Tabelle ist die zweite Tabelle, sie heißt bei uns tt_plzde und enthält sämtliche deutsche Postleitzahlen inklusive Längen- und Breitengradangaben. Solche Daten kann man beispielsweise über OpenGeoDB kostenlos beziehen: Projektseite: http://opengeodb.giswiki.org/wiki/OpenGeoDB Geodaten mit PLZ und Ortsname: http://fa-technik.adfc.de/code/opengeodb/PLZ.tab Im TypoScript ermittle ich Längen- und Breitengrad zu der im POST- oder GET-Parameter übergebenen PLZ aus der Tabelle tt_plzde und speichere sie im Register: TYPOSCRIPT page.5=CONTENT page.5{ table=tt_plzde select{ andWhere.data=GPVar:plz # Ganz wichtig: intval zur Vermeidung von SQL-Injection andWhere.intval=1 andWhere.wrap=plz=| } renderObj=COA renderObj 10=LOAD_REGISTER 10{ mylat=TEXT mylat.field=lat mylon=TEXT mylon.field=lon } } } # Auch den übergebenen Umkreis im Register speichern und mit intval versehen, so dass wir den Parameter ohne Bedenken in der SQL-Abfrage verwenden können page.10=LOAD_REGISTER page.10{ myumkreis=TEXT myumkreis.data=GPVar:umkreis myumkreis.intval=1 } Dann kommt natürlich die Abfrage aller benötigten Felder wie gewohnt: TYPOSCRIPT plugin.tx_browser_pi1 { views { list { 1 { select=select = tt_address.name, tt_address.first_name, tt_address.last_name, tt_address.zip, tt_address.address, tt_address.city, ... (etc.) und jetzt der interessante Teil: TYPOSCRIPT plugin.tx_browser_pi1 { views { list { 1 { andWhere =TEXT andWhere.value= ACOS(SIN(RADIANS({register:mylat})) * SIN(RADIANS(tt_address.tx_rggooglemap_lat)) + COS(RADIANS({register:mylat})) * COS(RADIANS(tt_address.tx_rggooglemap_lat)) * COS(RADIANS({register:mylon}) - RADIANS(tt_address.tx_rggooglemap_lng))) * 6380 < {register:myumkreis} Diese Formel stammt ebenfalls vom OpenGeoDB-Projekt, siehe hier: http://opengeodb.giswiki.org/wiki/OpenGeoDB_-_Umkreissuche Die magische Zahl 6380 ist der Erdradius. Die Formel berechnet die Distanz zwischen den Geodaten der eingegebenen PLZ mit den Geodaten des Arztes und prüft, ob sich diese Distanz innerhalb des zu verwendenden Umkreisradius befindet. Damit das < Zeichen nicht in ein HTML-Entity umgewandelt wird, muss noch dies im TS eingefügt werden: TYPOSCRIPT plugin.tx_browser_pi1.general_stdWrap.parseFunc.nonTypoTagStdWrap.HTMLparser.htmlSpecialChars = -1 Das war's eigentlich auch schon. Damit kann nach Eingabe von Postleitzahl und Umkreis (Angabe in Kilometern) nach Ärzten in der Umgebung gesucht werden. Ich hoffe, dass das jemandem hilft. [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 25.03.2011 um 13:07.] |
|
Verfasst am: 25. 03. 2011 [15:22]
|
|
|
dirk
Dirk Wildt
Dabei seit: 27.09.2010
Beiträge: 601
|
Hallo Pascal, vielen herzlichen Dank für Deine Lösung. Viele Grüße Dirk --
Willst Du den TYPO3-Browser mit einer Spende unterstützen? Wir freuen uns über jeden EUR! Sponsoring: Ich will einfach einen Betrag spenden http://typo3-browser.de/sponsoring |
|
Verfasst am: 25. 03. 2011 [15:57]
|
|
|
igorshmigor
Pascal Collins
Themenersteller
Dabei seit: 24.03.2011
Beiträge: 9
|
Ich habe zu danken, ohne die Extension wäre es so viel mehr Arbeit. Ich vergaß: TYPOSCRIPT andWhere.insertData=1 |
|
Verfasst am: 24. 06. 2011 [14:26]
|
|
|
AntjeK
Antje Koopmann
Dabei seit: 23.06.2011
Beiträge: 8
|
Hallo Pascal, habe die Umkreissuche nach Deiner Anleitung eingefügt. Vielen Dank dafür. Allerdings ist mir noch nicht klar, wie Du das HTML-Snippet in der Searchform aussehen soll und wie des dazugehörige Typo3-Snippet für eventuelle Marker. Woher bekomme ich die Werte für umkreis und plz, die vom Webseitenbesucher eingegeben wurden? Ist wahrscheinlich voll die Anfängerfrage aber igendwie bin ich gerade mit meinem Typoscript-Latein am Ende. Und dann habe ich noch ein Problem mit dem automatischen Befüllen der Daten für Lat und Lon aus Lookup-Tabelle. Hast Du das über PHP gelöst oder direkt über MySQL? Danke im Voraus! Antje [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 26.06.2011 um 03:27.] |
Powered by TYPO3 und mm_forum Extension


