You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
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

Board footer

Powered by FluxBB