On Thu, Oct 29, 2009 at 10:36:21AM +0100, Satz Klauer wrote: > Hi, > > eigentlich dachte ich, dass ich was ganz einfaches machen will, aber > mit den Beschreibungen der vorhandenen APIs und Kartendaten komme ich > nicht wirklich weiter. > > Ich habe als Ausgangsdaten GPS-Koordinaten und möchte nun ermitteln, > wo sich diese Koordinaten befinden. Allerdings will ich die Position > nicht in einer Grafik dargestellt haben, sondern ich benötige eine > Textausgabe mit Ort und nächstgelegener Straße. > > Also z.B: GPS-Koordinaten 48,8372 13,8237, zurückgelieferte > Information "München, Marienplatz" (keine ahnung, ob die Koordinaten > wirklich zum Marienplatz passen ;-) > > Hat jemand ein paar Heiße Tipps, wie sich sowas realisieren lässt?
Via osmosis einen datenbankabzug in die Postgres schieben und dann: select w.id as wayid, wt1.v as streettype, wt2.v as name, round(ST_Distance(pos.pos, w.linestring)/360*(6376500.0*3.14159*2.0)) as distance from ways w, way_tags wt1, way_tags wt2, (select ST_SetSRID(ST_Makepoint(8.1, 51.0), 4326) as pos) pos where ST_DWithin(w.linestring, pos.pos, 1200.0/(6376500.0*3.14159*2.0)*360.0) and w.id = wt1.way_id and wt1.k = 'highway' and w.id = wt2.way_id and wt2.k = 'name' order by distance asc limit 10 Die 8.1/51.0 sind die position und die 1200 ist die distance die gesucht wird. Es gibt maximal 10 straßen sortiert nach distanz: wayid | streettype | name | distance ----------+-------------+----------------------+---------- 25971613 | secondary | Rothenberger Straße | 103 31993563 | residential | Hilchenbacher Straße | 319 31993546 | residential | In der Himbeerwiese | 403 31993560 | residential | Hilchenbacher Straße | 501 32192257 | residential | Carl-Kraemer-Weg | 562 32192251 | residential | Am Backes | 674 28191121 | residential | Schützenstraße | 706 35862375 | residential | An der Sang | 766 28191126 | residential | Im Langen Feld | 827 28191127 | residential | Im Unteren Marktfeld | 872 (10 rows) Time: 43.420 ms Das mit der geografischen zuordnung zu einem "Place" oder "City" wird schon schwieriger - Eine eindeutige zuordnung geht nur ueber die boundary relations alles andere ist "professionelles raten" Mit ein bischen vorbereiten der boundary relations als geometrien in einer datenbank geht das dann auch so: select cb.id, cb.adminlevel, cb.name from completeborders cb, (select ST_SetSRID(ST_Makepoint(8.1, 51.0), 4326) as pos) pos where ST_Within(pos.pos, cb.border) order by adminlevel desc; id | adminlevel | name --------+------------+--------------------- 163253 | 8 | Hilchenbach 62761 | 4 | Nordrhein-Westfalen (2 rows) Time: 38.139 ms Das generieren der vordefinierten polygone aus den boundary relations habe ich schonmal hier geschrieben: http://lists.openstreetmap.org/pipermail/talk-de/2009-October/056253.html Das ganze oben ist natuerlich zu einfach - Es ist nicht garantiert das die naechstliegende Straße noch in Hilchenbach ist .. D.h. eigentlich muesste man erst das polygon suchen und dann die Straße suchen und zu distance noch pruefen ob die Straße auch durch das Polygon laeuft ... Aber das sind details die im ersten wurf mal zu vernachlaessigen sind ... Flo -- Florian Lohoff f...@rfc822.org "Es ist ein grobes Missverständnis und eine Fehlwahrnehmung, dem Staat im Internet Zensur- und Überwachungsabsichten zu unterstellen." - - Bundesminister Dr. Wolfgang Schäuble -- 10. Juli in Berlin
signature.asc
Description: Digital signature
_______________________________________________ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de