[Talk-de] ESRI Shapefiles

Frank Jäger frank at fotodrachen.de
Mi Jul 25 18:20:05 UTC 2007


Thomas Krüger schrieb:
> Moin,
> 
> die Frau vom Bauamt hat mir heute auch angeboten, mit Bebauungpläne und
> ähnliches, was sie dort selber ins GIS einhäcken, als Shapefile
> zuzusenden. Jetzt habe ich ein wenig rumgesucht, bin aber zu keiner
> vernüftigen Lösung gekommen, diese in JOSM reinzubekommen.
> Ich fand Tool namen shp2osm, in dem ich erst mal ein paar Bug beheben
> musste und dann beim Testen (mit den QGIS Demofiles und der freien
> Osnabrücker Karte) eine .osm-Datei mit Koordinaten in einem anderen
> Format als Länge/Breite in Grad bekam.
> Damit kam JOSM nicht klar und ich als Projektions- und
> Koordinaten-Analphabet erst recht nicht.
> 
> Ein Beispiel:
> <node lat='5799654.02' lon='3429429.46' id='1' ></node>
> 
> Kennt jemand eine Lösung?
> 
> Grüße,
> 
> Thomas
> 

Hallo,
die Koordinate ist offensichtlich

 "Gauß-Krüger, 3. Meridianstreifen", EPSG-Code 31467

Die muss für OSM transformiert werden in

 Geogr. Koordinaten (lat/lon), EPSG-Code 4326

Dazu kann man einschlägige Programme verwenden.
Ich mache das aber auch ganz gerne mit der Spatial-Datenbank 'PostGIS'
über die Funktion 'transform'.

Entweder zuerst die Shape-Daten nach PostGIS importieren (bleibt
zunächst im System 31467).
Dann beim Auslesen des Geometrie-Feldes das Koordinatensystem
transformieren, z.B.

  transform(the_geom, 4326)

  wenn im Feld 'the_geom' eine Punkt-Koordinate gespeichert ist, bekommt
man ein transformiertes Geometrie-Feld aus dem Select.
Daraus kann man mit den Funktionen x und y die Werte 'lat' und 'lon'
selektieren:

  select x(transform(the_geom, 4326)) AS lon,
         y(transform(the_geom, 4326)) AS lat

Wenn man die Daten nicht erst Speichern möchte, kann man die Werte auch
im SQL-Aufruf mitliefern:

  SELECT
   x(transform(
     GeometryFromText('POINT(3429429.46 5799654.02)',31467),4326))
     as x,
   y(transform(
     GeometryFromText('POINT(3429429.46 5799654.02)',31467),4326))
     as y;

Hier ist noch Optimierungs-Potential.
Die Koordinate wird 2mal Transformiert, je einmal für x und y.
Wer weiß, wie man 1 mal transformiert um dann x UND y heraus zu ziehen?

Zum Verständnis des Select:

  POINT(3429429.46 5799654.02)',31467

ist der Eingabetext für eine Geometrie der Form "Punkt" (Es gibt auch
Linie, Fläche, ...).
  34... = Rechswert X
  57... = Hochwert  Y

Die angehängte Zahl 31467 ist der SRID (Spatial Reference ID) für das
Koordinatensystem. Codierung gemäß EPSG (European Petroleum Survey Group).

Mit der Funktion 'GeometryFromText' macht man - wer ahnt es? - aus dem
Text eine "Geometrie" also ein spezielles Datenformat der Spatial-Datenbank.

Über Transform wird die Geometrie in ein anderes System umgerechnet.
Man muss erst mal eine Geometrie haben, denn nur damit funktioniert das.
Und aus der umgerechneten Geometrie holt man dann mit x und y die
einzelnen Koordinaten-Werte wieder raus.

Man braucht dazu nur eine (leere) Datenbank, die als PostGIS-Datenbank
eingerichtet ist.
Eine PostgreSQL-DB wird dazu um die Sprache 'pgsql' erweitert.
Die Tabelle 'spatial_ref_sys' wird aus mitgeliefertem SQL aufgebaut und
enthält die Parameter für jedes Koordinatensystem dieser Welt.


Shape nach Postgis?

Dafür wird mit PostGIS ein Tool mitgeliefert. Das habe ich aber noch
nicht ausprobiert.


Was ist PostGIS?

PostGIS ist ein Spatial-Zusatz für die Datenbank PostgreSQL.
Beides läuft auf Windows und Linux.

Ich habe beides nicht auf meinen "Hauptsystem" installiert, weil sonst
immer ein Server-Prozess gestartet wird. Statt dessen habe ich eine
virtuelle Maschine (VM-Ware-Player) mit Ubuntu und PostgreSQL und
PostGIS, das ich nur 'bei Bedarf' starte.

Die Falle dabei: PostGIS wird standardmäßig so installiert, das es nur
auf localhost lauscht. Man muss die .conf-Datei so ändern, dass auch
andere Verbindungen akzeptiert werden.

Vielleicht gibt es ein VM-Ware-Image mit einem vorinstallierten PostGIS?

MySQL soll ja seit ein paar Releases auch Spatial-Funktionen
beherrschen. Dazu habe ich aber keine Erfahrungen.


Ääähh  ... wie war noch mal die Frage .... ?


-- 
Frank Jäger

http://www.FOTODRACHEN.de




Mehr Informationen über die Mailingliste Talk-de