Hallo,

Tirkon wrote:
Für OSM müsste jetzt für jede mögliche Kombination von Nachbarn die
gemeinsame Grenzlinie ermittelt werden und in einen Weg umgewandelt
werden, der dann mit boundary = administrative und admin_level=9
getaggt wird.

Das kann man in der PostGIS machen (also Shapefiles in PostGIS einlesen, dort dann rechnen lassen).

Ich habe das vor einiger Zeit mal fuer Dresden gemacht und stichwortartig dokumentiert, was zu tun ist, und haenge das unten an.

Bye
Frederik


Shapefile mit shp2pgsql in Postgis einlesen (in eine neue Tabelle "dresden") [anmerkung: in den shapes, um die es hier ging, gab es eine spalte namens "sicad_txt", in der eine Zahl stand, die das Gebiet eindeutig beschrieb)


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 alle Grenz-Ways als einzelne Geometrien in der Datenbank und kann mittels einem modifizierten shp2osm-Skript diese Ways in .osm-Dateien verwandeln und die passenden Relationen anlegen. Dazu habe ich ein Skript, das ist aber eine ziemliche Perl-Bastelwueste. Kann gern jeder haben, aber man muss sich schon mit Perl auskennen.


--
Frederik Ramm  ##  eMail [email protected]  ##  N49°00'09" E008°23'33"

_______________________________________________
Talk-de mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/talk-de

Antwort per Email an