[OSM-Dresden] Stadtteilgrenzen von Dresden als Shape-Datei

Jens Herrmann osm at bikelab.org
Do Aug 6 22:24:18 CEST 2009


Christoph Wagner schrieb:
> Es geht alles seinen Gang, also einfach nix tun und entspannt
> zurücklehnen (oder drüber nachdenken, wie wir die Daten dann eigentlich
> genau drin haben wollen, welche Tags etc.).
Anbei die Kopie von Frederiks Mail:

------------------------------------------------------------------
> Oder einfach das hier verwenden:
> http://home.geggus.net/pub/Stadtteile_DD_4326.tar.gz

Ich habe jetzt Svens Skript genommen und ein bisschen im Postgis
verwurstet. Unten haenge ich, falls es jemanden interessiert, an, was
ich machen musste, um die Grenze in einzelne Ways zu zerlegen.

Das Resultat davon (und von nachgelagertem
Relationen-Zusammensetz-Skript) ist

http://www.remote.org/frederik/tmp/dresden-mit-relations.osm.gz

Eventuell kann sich das mal jemand mit Ortskenntnis anschauen, ob das
was taugt. (NICHT gleich alle das File hochladen ;-) insbesondere hab
ich mich jetzt nicht um moegliche En-/Exklaven gekuemmert.

Bye
Frederik

* Shapefile in Postgis einlesen (Tabelle "dresden")

CREATE TABLE multilinestrings (
    id   SERIAL NOT NULL UNIQUE,
    gid1 INTEGER NOT NULL,
    gid2 INTEGER NOT NULL
);

SELECT AddGeometryColumn('multilinestrings', 'geom', 4326,
'MULTILINESTRING', 2);

INSERT INTO multilinestrings (gid1, gid2, geom) SELECT
int4(a.sicad_txt), int4(b.sicad_txt),
ST_Multi(ST_Intersection(a.the_geom, b.the_geom)) FROM dresden a,
dresden b WHERE a.sicad_txt<b.sicad_txt AND ST_Touches(a.the_geom,
b.the_geom);

Jetzt hat man die Linien, wo sich einzelne Stadtteile beruehren. Die
Aussengrenze fehlt noch, dazu hab ich vermutlich etwas un-elegant:

create table outline (id serial not null unique);
SELECT AddGeometryColumn('outline','geom',4326,'MULTILINESTRING',2);

insert into outline (id,geom) values(0, (select
ST_Boundary(ST_Multi(ST_Union(the_geom))) as geom from dresden));

insert into multilinestrings(gid1,gid2,geom) select
int4(a.sicad_txt),0,ST_Multi(ST_Intersection(a.the_geom, b.geom)) FROM
dresden a, outline b where ST_Touches(a.the_geom,b.geom);

Und um die resultierenden multilinestrings zu zerlegen

CREATE TABLE ways (
 id serial not null,
 gid1 INTEGER NOT NULL,
 gid2 INTEGER NOT NULL
 );
SELECT AddGeometryColumn('ways', 'geom', 4326, 'LINESTRING', 2);

INSERT INTO ways (geom, gid1, gid2) SELECT
(ST_Dump(ST_LineMerge(geom))).geom, gid1, gid2 FROM multilinestrings;

Nun hat man eine Basis, auf der man dann mit dem modifizierten shp2osm
die Ways und Relationen zusammenbauen kann.

Bye
Frederik
----------------------------------------------------------------------

Jens