You are not logged in.
- Topics: Active | Unanswered
Announcement
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***
#1 2015-05-08 10:46:31
- make122
- Member
- Registered: 2015-03-25
- Posts: 10
Herausfinden ob Punkt in Polygon enthalten ist
Hallo,
folgende Situation. Ich habe einige Straßen aus der Tabelle planet_osm_nodes herausgefiltert, aus lon/lat habe ich mit:
... astext(ST_Transform(ST_SetSRID(ST_MakePoint(w.lon/100.0,w.lat/100.0),900913),4326)) AS koordinaten gemacht.
Bis dahin hat soweit alles funktioniert.
Als Ergebnis habe ich z.B. so etwas aus einer SQL Abfrage erhalten:
"Aachener Straße";"24";"28327";"Bremen";"POINT(8.91859190987236 53.0759916627644)"
Jetzt möchte ich noch überprüfen, ob die gefundenen Koordinaten auch wirklich im PLZ Bereich 28327 liegen.
Dazu habe ich mir aus der Tabelle planet_osm_polygon alle PLZ Polygone IDs herausgesucht. Wenn ich es richtig verstanden habe, sollte es doch möglich sein,
mit der Funktion ST_WITHIN zu überprüfen ob der erwähnte Punkt in einem der PLZ Polygone enthalten ist.
Die gefundenen PLZ Polygone habe ich zuvor eine Extra Tabelle(plz_poly) geschrieben;Felder: osm_id,way(geom),plz. Der Geometry Type von way ist unverändert 900913 aus der Tabelle planet_osm_polygon übernommen.
Versucht habe ich es z.B. so:
select * from plz_poly p where ST_Within( ST_GeomFromText('POINT(8.91859190987236 53.0759916627644)' , 900913 ), p.way)Allerdings erhalte ich immer ein leeres Ergebnis. Kann mir vielleicht jemand ein Tip geben, woran dies liegen könnte?
Gruß
Offline
#2 2015-05-08 10:56:03
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Herausfinden ob Punkt in Polygon enthalten ist
ST_GeomFromText('POINT(8.91859190987236 53.0759916627644)' , 900913 )sieht ziemlich schräg aus. Das heisst "nimm (8.9 53.0) und interpretiere das als EPSG:900913. Das wird dann ein Punkt, der ein paar Meter über dem Äquator liegt.
Wenn Dein p.way in EPSG:4326 vorliegt (was ich glaube), dann solltest ihn ungefähr so erst mal in EPSG:900913 umwandeln (ungetestet!):
st_transform(ST_GeomFromText('POINT(8.91859190987236 53.0759916627644)' ,4326),900913)und dann schaun, ob er in plz_poly liegt. Vorausgesetzt, deine plz_poly liegt ebenfalls in EPSG:900913 vor.
Grüße, Max
Offline
#3 2015-05-08 11:11:58
- gormo
- Member
- Registered: 2013-08-01
- Posts: 2,119
- Website
Re: Herausfinden ob Punkt in Polygon enthalten ist
wenn du mit osm2pgsql importiert hast, dann hast du doch auch die Tabelle planet_osm_point und _polygon, oder? Und da müssten doch die Geometrien schon gefüllt sein.
Siehe http://wiki.openstreetmap.org/wiki/Osm2 … sm_polygon . ah, verlesen...
Du hast auch noch einen Fehler in
select * from plz_poly p where ST_Within( ST_GeomFromText('POINT(8.91859190987236 53.0759916627644)' , 900913 ), p.way)'POINT(8.91859190987236 53.0759916627644)' ist eindeutig in EPSG:4326. Was passiert wenn du mit
select * from plz_poly p where ST_Within( ST_GeomFromText('POINT(8.91859190987236 53.0759916627644)' , 4326 ), p.way)abfragst?
Last edited by gormo (2015-05-08 11:14:42)
OSM hat nicht das Ziel bis Ende des Monats einen vollständigen Datensatz der Welt zu enthalten.
(nach S.W.) - Aber weil die Welt vielfältig ist, weil sie auch im Detail interessant ist, mag ich genaue Karten (nach C.)
Offline
#4 2015-05-08 11:16:02
- make122
- Member
- Registered: 2015-03-25
- Posts: 10
Re: Herausfinden ob Punkt in Polygon enthalten ist
Das wars,bzw. fehlte...
st_transform(ST_GeomFromText('POINT(8.91859190987236 53.0759916627644)' ,4326),900913)Merci!
Offline