Unterschiede in epsg:31468 und epsg:4326 Transformationen JOSM/QGIS

Folgende Situation:

Im Zuge des Schutz- und Schongebietsmappings haben wir über JOSM epsg:31468 shape files importiert (manuelles copy&paste). Der Vergleich der ursprünglichen Shapes mit dem was z.B. über Overpass zurück kommt ergibt laut JOSM eine Abweichung von maximal 0,03 Metern - das hake ich mal als Rundungs-Fehler ab:

https://i.postimg.cc/k5SvSMTx/Deltas-In-JSOM.png

Wenn ich allerdings das original Shape und den Overpass-Export in QGIS lade, dann bekomme ich auf einmal eine Abweichung von 2 Metern - und das verstehe ich nicht mehr:

https://i.postimg.cc/NFs6Z6B4/Deltas-In-QGIS.png

(overpass export ist hier die quasi übereinander liegende linie des ovp turbo geojsons und des overpy exports)

Hintergrund des Problems: Es wird regelmäßige Updates für die Shapes geben und ich zerbrech mir gerade den Kopf wie ich eine vernünftige Diff-Analyse hinbekommen, also ein Script, das sämtliche neuen oder geänderten Gebiete ausspuckt.

Aktuell habe ich eine Implementierung die sich auf einen Intersection over Union Wert abstützt und zum Anderen versucht solche ~ 2 meter offsets - die ich in python/fiona/shapely ebenfalls bekomme - zu erkennen und weg zu filtern. Die Grenze zwischen Offset Erkennung und “realer Änderung” um ~ 2 Meter ist allerdings sehr fuzzy (zu allem Überfluss werden auch irgendwo noch redundante Punkte auf einer Geraden weg optimiert was ich ebenfalls mit einem Abstands-Parameter berücksichtigen muss).

Langer Rede kurzer Sinn: Wieso verhält sich JOSM hier anders als QGIS bzw. shapely und wie kann man das in den Griff bekommen? Auch in realer Hinsicht: Sind die importierten Gebiete tatsächlich um diese 2 Meter “daneben gemappt” und wie wäre das zu korrigieren?

Hei,

Also: EPSG 31468 ist Gauss-Krüger 4. Meridianstreifen und EPSG 4326 ist WGS84

Bei 31468 liegt das Bessel-Ellipsoid zu Grunde mit Gauss-Krüger-Projektion
Bei 4326 liegt das WGS84-Ellipsoid zu Grunde ohne Projektion.

Beide Ellipsoide unterscheiden sich in ihren Parametern, so daß Daten am besten physisch umgerechnet werden müssen. Macht man das nicht, kommt es zu dem von dir beschriebenen Lagebezugsfehler. Ich glaube JOSM kann nicht unrechnen und nicht onTheFly Gauss-Krüger-Daten korrekt umprojizieren. Solcher Lageversatz kann bis zu 70 bis 120m betragen, je nach Ort.

Solche Transformation kann und würde ich stets vorher mit einem “großen” Gis-Programm machen: ArcGis oder QGis

Bei solchen Umrechnungen gibt es verschiedene Transformationsmethoden. Ich würde NTv2 BETA2007 empfehlen. Das ist eine Netzbasierte Transformationsmethode und das genauste, was es gibt.

Sven

Ok - wie bringe ich QGIS dazu diese Trafo zu verwenden? Bzw. ich importiere die shapes in QGIS - wie geht’s dann weiter? Wenn ich das recht verstehe, dann reicht ja ein einfacher Export nach 4326 nicht aus… Allerdings ist ein derartig über QGIS konvertiertes und dann in JOSM importiertes shape file tatsächlich um 2 Meter gegenüber dem initialen direkt import der 31468 shape verschoben.

D.h. wir werden wohl alle Imports entsprechend anpassen müssen :-/

was soll das EPSG:4326, der allgemeine standard von josm ist doch EPSG:3857?

4326 ist das übliche System, in dem wir Daten eintragen (Längengrad und Breitengrad auf einer leicht elliptischen Erde). 3857 ist das System in dem viele unserer Karten gerendert werden (Mercatorprojektion auf einer Kugel).

Edit zur Klarstellung: Die Darstellung in JOSM ist fast immer in EPSG:3857. Weil da sind Kreisverkehre auch kreisförmig statt flachgedrückt und die Hintergrundbilder müssen nicht verzerrt werden. In die Datenbank wird aber EPSG:4326 geschrieben.

EPSG 4326
EPSG 3857

EPSG 4326 ist eigentlich die Basis. EPSG 3857 bautdarauf auf (Siehe Unterschied im Wert Unit)

Sven

Gute Frage… Ich staune ohnehin daß es noch irgendwo Daten in Gauss-Krüger gibt… :rage: Ich stoße bei meiner GIS-Arbeit (dienstlich) nur an 2 Stellen auf Gauss-Krüger: entweder alte Artdaten oder Daten (hier in Brandenburg) der LMBV… Bei allen anderen Daten habe ich seit mindesten 10-12 Jahren kein Gauss-Krüger mehr gesehen…

Bei QGis müsste ich auch erst schauen,. wie der Weg beim Export wäre…

Mein Angebot: schicke mir die Daten, ich konvertiere die mit ArcGis (hab es privat als HomeUse-Variante).

Sven

Andere Formulierung:
EPSG 4326 (WGS 84) ist ein sphärisches Koordinatensystem, EPSG 3857 (Mercator) ist eine Kartenprojektion davon auf eine ebene Fläche. Nur dadurch wird ein Ei zum Kreis.
BaWü hat übrigens noch gar nicht so lange her von GK umgestellt. In QGis geht die Transformation auf jeden Fall, habe das damals in der Version BETA2007 gemacht.

Hallo Arminus,

wäre es möglich deinen Source Code irgendwo zugänglich zu machen?

Es spricht nichts gegen eine selbstgebaute Python-Lösung statt QGIS: Die proj-Bibliothek, die die Basis für fiona, shapely, etc. bildet, bringt die hochgenaue NTv2-Transformation BeTA2007 für Deutschland schon mit unter /usr/share/proj/BETA2007.gsb (https://github.com/OSGeo/PROJ/blob/master/data/tests/BETA2007.gsb).

Vermutlich wird sie einfach nicht – oder nicht richtig – benutzt von deinem Skript.

Viele Grüße,
Günter

So kommen die Daten zunächst mal vom Deutschen Alpenverein (wie an andere Stelle erwähnt, das ok für die Verwendung haben wir)

Wie gesagt, in QGIS “einfach in EPSG 4326” exportieren scheint nach meinem Empfinden den Offset zu beheben - ob’s da im Zentimeter-Bereich noch Ungenauigkeiten gibt kann ich aber nicht beurteilen. Ich bin halt Informatiker und kein GIS Ingenieur :wink:

Das ist nett, können wir auch einmal versuchen, aber es wird regelmäßige Updates für die Shapes vom DAV geben, d.h. ich möchte eigentlich schon verstehen was an der Stelle wo und warum passiert :wink: Zumal ich ja auch einen brauchbaren Diff implementieren möchte und aktuell mit pyproj den gleichen Effekt habe :frowning:

Außerdem muss ich mir jetzt noch überlegen wie ich am effektivsten die offensichtlich 2 Meter daneben gemappten Gebiete gefixt bekomme. Also entweder manuell auf die neu konvertierten Shapes hin ziehen, oder löschen und neu kopieren… So wie ich das sehe hat JOSM keine move line / snap funktion.

Das utils2 Plugin hat eine replace geometry Funktion: https://wiki.openstreetmap.org/wiki/JOSM/Plugins/utilsplugin2

Toll. Ich dachte immer, die würden mauern und “Ihre Daten” nicht rausgeben. Und auf keinen Fall an OSM.

Oder sind die Daten nur von einem Untervereinchen? :wink:

Gruss
walter, der eigentlich von den Alpen keine Ahnung hat.

Dann kann ich nur dem DAV den gut gemeinten Rat geben… auf ETRS89 umzusteigen… Da hat man einmalig diese Konvertierung der Datenhaltung, ist Datentechnisch auf dem neusten Stand und umgeht diese Gauss-Krüger-Transformatiererei…

Meine Meinung…

Sven

Nein, die Daten kommen vom Ressort Naturschutz und Kartografie beim DAV.

Vielleicht hilft Dir auch das Conflation-Plugin, was “replace geometry” verwenden kann.

Für automatische Abläufe würde ich mal einen Blick auf ogr2ogr werfen… Könnte des nachts im Hintergrund ganz ohne Maus in der Hand laufen und kann genauso gut konvertieren wie qgis (weil ja eh fast alle die proj.4-Bibliothek nehmen, nur halt unterschiedlich Parameter da reinfüttern)

ogr2ogr ist in GDAL enthalten

Danke, ogr2ogr verwende ich bereits an anderer Stelle. Ich hatte gedacht, dass Transformation mit anderen Tools (JOSM, pyproj) sich genauso verhalten, aber das war offensichtlich naiv :wink:

Kurzer Update zu diesem Thema (und falls das irgendwer irgendwann mal an anderer Stelle braucht):

QGIS wendet diese Methode offenbar auch an und ich habe inzwischen gelernt, dass man den Python pyproj.Transformer auch mit einem proj pipeline String initialisieren kann.

Beim Laden eines EPSG:31468 shapes in ein EPSG:4326 Projekt in QGIS wird dort als erstes dieser pipeline string angezeigt:


+proj=pipeline
+step +inv +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel
+step +proj=hgridshift +grids=BETA2007.gsb
+step +proj=unitconvert +xy_in=rad +xy_out=deg

Den kann man 1:1 in pyproj.Transformer.from_pipeline() übernehmen und dann sollte das (ggf. erst dann in JOSM zu importierende) EPSG:4326 Ergebnis dort auch passen.