Ich würde auf keinen Fall davon ausgehen, dass die Wikipedia-Angaben richtig/vollständig sind. Auch eine Abfrage bei der DPAG liefert nicht alle PLZ einer Gemeinde.
select -plz.osm_id, plz.note,-boundary.osm_id,boundary.name
from planet_osm_polygon plz,
planet_osm_polygon boundary
where boundary.boundary='administrative'
and plz.boundary = 'postal_code'
and length(boundary.tags->'de:amtlicher_gemeindeschluessel') >5
and st_intersects (boundary.way, plz.way)
order by boundary.name, plz.note;
Jo, ist logisch. Wieder mal das blöde st_intersects, was den Rand mit nimmt. Nun denn, dann buffern wir halt.
Die 2-3, die ich überprüft hatte, waren natürlich sauber
ach du grüne neune, da muß ich mich mal reinknien.
Danke für den Tip
walter
uii, wenn ich eine Testauswertung mit Eppelborn und Umgebung füttere, kommt tatsächlich das Richtige raus:
select -b.osm_id border,b.name,-p.osm_id pcborder,p.note
from planet_osm_polygon b,
planet_osm_polygon p
where b.osm_id in (-1187149)
and p.osm_id in (-3346971,-1184805,-1184803,-3348207,-3348209,-3348204)
and b.way && p.way
and ST_Relate(b.way,p.way,'T********')
order by b.name,b.osm_id desc, p.note
;
border | name | pcborder | note
---------+-----------+----------+-----------------
1187149 | Eppelborn | 1184803 | 66571 Eppelborn
1187149 | Eppelborn | 3348204 | 66822 Lebach
(2 rows)
select -b.osm_id,b.name,p.note
from planet_osm_polygon b,
planet_osm_polygon p
where b.boundary='administrative'
and p.boundary = 'postal_code'
and length(b.tags->'de:amtlicher_gemeindeschluessel') >5
and b.way && p.way
and ST_Relate(b.way,p.way,'T********')
order by b.name,b.osm_id desc, p.note;
Ok die Daten sehen gar nicht so schlecht aus, wenn man die rechte Spalte als Gemeindename heranzieht. Diesmal habe ich aber k.A. wie sie zustande kommen… Kannst du noch die Gemeindeschlüssel dazu ausgeben?
Musste den Job nochmals laufen lassen, da die Formel von couchmapper nicht ganz passte.
select -b.osm_id osm_id,b.name,
b.tags->'de:amtlicher_gemeindeschluessel' ags,
p.note,
st_area(geography(st_intersection(b.way,p.way))) / 1000000 area
from planet_osm_polygon b,
planet_osm_polygon p
where b.boundary='administrative'
and p.boundary = 'postal_code'
and length(b.tags->'de:amtlicher_gemeindeschluessel') >5
and b.way && p.way
and ST_Relate(b.way,p.way,'T********')
order by b.name,b.osm_id desc, p.note;
Ich habe das nicht alles im Kopf, sondern muss es erst nachschlagen. Außerdem habe ich anderes zu tun.
Messenkamp ist eine Straße, die in Süsel liegt und bei Pönitz gelistet ist. Die Siedlung heißt Broderdammskamp.
Ist aber auch ohne Geheimwissen herauszufinden, wenn man sich in OSM die PLZ-Relation 23684 anschaut.