QGIS speichert Polygon fälschlicherweise mit benutzerdefiniertem CRS, während es im laufenden Betrieb korrekt projiziert wird

8

Ich teile ein Landpolygon auf, um die Zentrierung der Projektion auf den Pazifik zu verschieben. Es gelingt mir, das ursprüngliche Polygon auf dem 22-Meridian erfolgreich zu zerschneiden, und es sieht gut aus, wenn ich mit meinem benutzerdefinierten CRS eine spontane Reprojektion durchführe:

OTF-Polygonprojektion

Scheint aber etwas verschieben, wenn tatsächlich Speichern des Polygons mit den gleichen CRS:

gespeicherte Polygonprojektion

Mein CRS verwendet diesen proj4-String: +proj=eqc +lon_0=-158 +datum=WGS84 +units=m +no_defs +lon_wrap=-158

Irgendwelche Ideen, was dies verursachen könnte?

srha
quelle
Dies wird durch Merkmale verursacht, die den Ostmeridian von -156 + 180 = 24 Grad überlappen (dies tritt häufiger beim Überqueren des 180-W-Antimeridians auf, ist jedoch anders, da Sie die Karte verschoben haben
Steven Kay,
@StevenKay, das ist eigentlich ein Tippfehler von meiner Seite: x
korrigierte
2
Möglicherweise verwandt: gis.stackexchange.com/questions/70411/… . Ich habe eine Kugel anstelle eines Ellipsoids verwendet, ein geschnittenes Polygon mit einer Breite von 0,2 Grad und keine +lon_wrapOption.
AndreJ

Antworten:

6

Diese 'Artefakte' sind ein bekanntes Problem und sind normalerweise das Ergebnis von Polygonen, die den Antimeridian kreuzen (180 Grad e / w). Die Lösung hierfür ist normalerweise ogr2ogr mit der Option wrapdateline.

Aber das wird dir nicht helfen. In Ihrem Fall verwenden Sie einen Versatz um -156. Dies bedeutet, dass jedes Merkmal, das den 24E-Meridian (-156 + 180 = 24) kreuzt, Probleme verursacht.

Um dies zu beheben, entfernte ich einen dünnen Streifen auf beiden Seiten von 24E.

Ich habe mit Natural Earth-Daten begonnen und die Projektion (vorerst) weggelassen und nur WGS84 verwendet.

Um den 24E-Meridian zu zeichnen, habe ich das QuickWKT-Plugin verwendet und Folgendes als neue Ebene hinzugefügt ...

LINESTRING (24 -90,24 90)

Das zeichnet eine einzelne Linie entlang der Länge des 24E-Meridians.

Als nächstes digitalisierte ich manuell eine Polygon-Scratch-Ebene und fügte zwei Polygone hinzu, eines auf jeder Seite der Linie und eine Halbkugel , wobei ich die Linie so nah wie möglich umarmte. (Beachten Sie die Qualität der Strichzeichnung hier ...)

Geben Sie hier die Bildbeschreibung ein

Sie sollten dies wahrscheinlich auch mit dem QuickWKT-Plugin tun, um mehr Präzision zu erzielen - es erfordert mehr Eingabe und ich wollte einen schnellen Test :)

Als nächstes habe ich Clip meiner ursprünglichen Shape - Datei auf die Schicht mit den beiden Polygonen Clip. Dadurch wird ein dünner Streifen um den 24E-Meridian herausgeschnitten ...

Geben Sie hier die Bildbeschreibung ein

Schließlich habe ich die OTF-Projektion mit Ihrem benutzerdefinierten CRS angewendet - und das feste Ergebnis.

Geben Sie hier die Bildbeschreibung ein

Steven Kay
quelle
Ah, oh nein! Ich wünschte, ich wäre früher zu meinem Computer zurückgekehrt, bevor Sie all diese Arbeit für mich erledigt haben. Mein proj4-String war tatsächlich um die 158; Ich habe gerade den falschen eingefügt (mit 156), nachdem ich einige Experimente durchgeführt habe.
Srha
Sie werden das gleiche Problem mit 158 ​​sehen (ich mache es trotzdem) - ändern Sie einfach 24 zu 22. Wenn Sie es zum Laufen gebracht haben, ohne dies zu tun, lassen Sie mich wissen, wie - ich habe die lon_wrap-Funktion in proj4 erst vor kurzem gefunden :) (wenn Sie sich das vorstellen, könnte dies erklären, warum Madagscar leicht versetzt zu sein scheint ...)
Steven Kay
1
Also habe ich alle Schritte gemacht, die Sie (im Wesentlichen) gemacht haben - WKT-Polygonstreifen um 22; Vektor> Geoverarbeitung> Differenz landet als meine Eingabeebene und WKT-Streifen als Differenzschicht; OTF-Reprojekt. Bis dahin sieht alles gut aus. Das Problem tritt auf, nachdem ich mein resultierendes Polygon mit demselben benutzerdefinierten CRS gespeichert habe - das gespeicherte Polygon ist alle wackelig, aber das OTF-Polygon ist in Ordnung :(
srha
1
danke für die Klarstellung ... habe gerade die gespeicherte Ebene aus meinem (jetzt verworfenen) Projekt geladen (mit den benutzerdefinierten proj4 crs gespeichert) und der Wert lon_wrap wird nicht in den Ebenenmetadaten angezeigt. das könnte das Problem sein
Steven Kay
Hmm. Wissen Sie, wie Sie das beheben können? Ich finde die proj4-Dokumentation etwas verwirrend.
Srha