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 2013-06-25 13:19:31

mvollmer
Member
Registered: 2012-01-03
Posts: 33

Postleitzahl zu Ort

Hallo zusammen,

mit folgender Abfrage ist es ja möglich die einen Ort in einer OSM Datenbank zu suchen:

SELECT 
	cast(poly.name as VarChar(50))
FROM
	planet_polygon as poly

WHERE 
	admin_level IS NOT NULL AND
	poly.name ILIKE '%Ortsname%';

Jedoch würde ich gerne die Postleitzahlen zu den Orten wissen.
Ich habe nur PLZ in der Tabelle planet_line/point gefunden, jedoch war es mir nicht möglich da eine Abfrage zu gestalten die dieses kombiniert.

Könnt ihr mir eventuell Tipps geben, wie ich das ganze angehen muss?

Mit freundlichen Grüßen
mvollmer

Offline

#2 2013-06-25 17:07:45

stephan75
Member
Registered: 2008-05-28
Posts: 2,918

Re: Postleitzahl zu Ort

Du musst dabei unterscheiden, dass es zwar ganz viele Orte in Deutschland gibt, wo Gemeindegrenze und PLZ-Grenze identisch sind, es gibt aber auch etliche, wo für einen Ort mehrere PLZ gelten, oder mehrere Orte teilen sich eine PLZ.

Dadurch kann es sich ergeben, dass du die PLZ eunes Ortes eher am Place-Node suchen musst als an der Grenzrelation mit einem admin_level=x

Offline

#3 2013-06-25 22:37:39

maxbe
Member
Registered: 2010-01-19
Posts: 3,255
Website

Re: Postleitzahl zu Ort

mvollmer wrote:

Ich habe nur PLZ in der Tabelle planet_line/point gefunden, jedoch war es mir nicht möglich da eine Abfrage zu gestalten die dieses kombiniert.

Hi,

falls Du deine Datenbank mit osm2pgsql und der Option -k (oder --hstore) importiert hast, landen alle Schlüssel, die nicht in eine eigene Tabellenspalte kommen in der Spalte tags (ein hstore):

select name,tags->'postal_code' as PLZ from osm_polygon where admin_level is not null and name ilike '...'

Manche Postleitzahlen stehen nicht an der Grenze sondern zusätzlich oder aussschliesslich in place-nodes:

select name,place,tags->'postal_code' as PLZ from osm_point where place is not null and tags->'postal_code'!='';

Geduldige Menschen können auch alle Nodes mit gesetztem "addr:postcode=*" abfragen, die innerhalb einer Grenze liegen (Relation 62428 ist München, limit 1, weils da Exklaven gibt und mich nur die grösste Teilfläche interessiert (dauert nen Kaffee lang uns liefert 93 Stück PLZs):

select distinct(tags->'addr:postcode') from osm_point where st_contains((select way from osm_polygon where osm_id=-62428 order by way_area desc limit 1),way);

Noch geduldigere Leute wiederholen das ganze noch mit polygonen im Grenzpolygon, könnte ja sein, dass die Adressen am Gebäudeumriss hängen.

Grüße, Max

Offline

#4 2013-06-25 23:08:08

wambacher
Member
From: Schlangenbad/Wambach, Germany
Registered: 2009-12-16
Posts: 16,769
Website

Re: Postleitzahl zu Ort

Es gibt für die PLZ-Gebiete  eigenständige Relationen mit type=multipolygon/boundary und boundary=postal_code. Diese sind die "richtigen" PLZ-Gebiete, während die Administrativen Grenzen mMn dafür "missbraucht" werden. Die sollten dann und nur dann benutzt werden, wenn sich PLZ-Gebiet und Stadtfläche zu 100% decken. Und das ist wirklich nicht oft der Fall.
Ich habe schon die abenteuerlichsten Konstrukte gesehen. Angefangen von mehreren Administrativen Grenzen und jeweils der gleichen PLZ bis hin zu Grenzen mit postal_code=1,2,3,4,5 postal_code=1;2;3;4;5 oder postal_code=1-5

maxbe wrote:

Noch geduldigere Leute wiederholen das ganze noch mit polygonen im Grenzpolygon, könnte ja sein, dass die Adressen am Gebäudeumriss hängen.

Und extrem geduldige Leute machen sowas: http://osm.wno-edv-service.de/plz wink

Gruss
walter

Ich muß das Teil wirklich mal wieder aus der Mottenkiste rausholen. Sind viele kleine Unschönheiten drin um die ich mich mal kümmern sollte.
Darum klemme ich das heute Abend (Mi) wieder ab.

Last edited by wambacher (2013-06-25 23:11:51)

Offline

#5 2013-06-25 23:13:21

SimonPoole
Member
Registered: 2010-03-14
Posts: 2,195

Re: Postleitzahl zu Ort

maxbe wrote:

...

Noch geduldigere Leute wiederholen das ganze noch mit polygonen im Grenzpolygon, könnte ja sein, dass die Adressen am Gebäudeumriss hängen.

... und interpolations :-)

Offline

#6 2013-06-25 23:16:51

wambacher
Member
From: Schlangenbad/Wambach, Germany
Registered: 2009-12-16
Posts: 16,769
Website

Re: Postleitzahl zu Ort

SimonPoole wrote:

... und interpolations :-)

Wow, DIE hab ich auch noch nicht drin sad

Offline

#7 2013-06-25 23:38:55

SimonPoole
Member
Registered: 2010-03-14
Posts: 2,195

Re: Postleitzahl zu Ort

wambacher wrote:
SimonPoole wrote:

... und interpolations :-)

Wow, DIE hab ich auch noch nicht drin sad

Auf den 2 address layern auf qa.poole.ch berücksichtige ich die schon immer, dass einzige was ich weglasse sind site relations ... muss aber dann auch mal gemacht werden.

Simon

PS: noch was zum Thema (PLZ in OSM): die Schweiz und Deutschland haben da ein ähnliches Konzept, im Gegensatz z.B. zu der UK. Ich hab für die Schweiz mal eine Auswertung gemacht Gemeinde-Polygone (die wir vollständig in OSM haben) vs. PLZ Polygone (die wir nicht importiert haben und vermutlich auch nicht werden): http://qa.poole.ch/ch-plz/ (auf das "m" Klicken zeigt das Gemeindepolygon auf einer PLZ-Karte).

Last edited by SimonPoole (2013-06-25 23:58:19)

Offline

#8 2013-06-26 07:35:25

mvollmer
Member
Registered: 2012-01-03
Posts: 33

Re: Postleitzahl zu Ort

Guten Morgen,

erstmal Vielen Dank zu den zahlreichen Antworten! Ja ich habe die Daten in die Datenbank mit --hstore importiert.

maxbe, die letzte Query scheint genau die richtige für mich zu sein. Ich habe sie wiefolgt umgeschrieben:

SELECT
DISTINCT ON (plz)
    tags->'addr:postcode' as plz, way
FROM
    planet_point
WHERE
    st_contains((select way from planet_polygon where name ILIKE '%Ortsname%' ORDER BY way_area DESC LIMIT 1),way)
    and tags->'addr:postcode' ILIKE '%PLZ%';

Dies wird nun als Suche genutzt. D.h. es soll dem User ermöglichen PLZ + Ortsname anzugeben um dann dort hinnavigieren zu können.

Falls ihr optimierungsvorschläge habt, höre ich sie mir gerne an smile

Mit freundlichen Grüßen
mvollmer

Offline

Board footer

Powered by FluxBB