Drehen Sie die Markierungslinie des Geometriegenerators in Abhängigkeit von der Kartenprojektion QGIS

8

Ich möchte die Markierungslinie aus der Geometriegeneratorfunktion drehen: Die Sache ist, dass ich mithilfe des Geometriegenerators eine Linie über make_line erstelle und Punkte die berechneten Werte sind (basierend auf Werten in Attributtabellenfeldern - in der Asia Lambert Conformal Conic-Projektion EPSG: 102027).

Anfangsrechteck in EPSG: 102027

Der empfangene Linienstreifen muss ein Rechteck sein (parallel zum Kartenbereich). Wenn Sie jedoch die Kartenprojektion im Kartenbereich ändern, bilden diese Punkte anschließend ein gedrehtes Rechteck (obwohl die Beschriftung parallel ist).

empfangenes Rechteck in benutzerdefinierter Projektion

Wie kann ich mein Rechteck so drehen (oder möglicherweise im laufenden Betrieb Transformationspunktkoordinaten in der Attributtabelle in benutzerdefinierten Projektionen), dass es parallel zur Kartenleinwand verläuft?

Meine Projektion: + proj = lcc + lat_1 = 57 + lat_2 = 63 + lat_0 = 0 + lon_0 = 133 + x_0 = 0 + y_0 = 0 + ellps = intl + Einheiten = m + no_defs

Mein Geometriegeneratorstil: Stil

Ich habe versucht, meine Geometrie (erstellt mit dem Geometriegenerator) über die Transformationsfunktion (transform (geom, source_auth_id, dest_auth_id)) zu transformieren, aber es ist trotzdem falsch:

transformierte Geometrie und Beschriftungen

Im Zeichenhintergrund habe ich keine Funktionalität zum Zeichnen von benutzerdefinierten Formrändern gefunden - nur durchgezogene Linien, aber ich möchte eine Linie mit Punktmarkierungen erhalten

nur durchgezogene Linie

Jane
quelle
Könnten Sie ein minimales Shapefile erstellen, um dies zu reproduzieren, und die Attribute so vorbereiten, dass sich der Ausdruck nur auf die geometrische Herausforderung konzentriert? Klingt nach einem schönen Puzzle!
bugmenot123
Ja! Hier sind Sie cloud.mail.ru/public/JAeg/L97RSjGQs Sie können shp und qlr herunterladen, Projektionsformeln finden Sie im obigen Beitrag.
Jane
Ich habe im Geometriegenerator-Stil meine benutzerdefinierte Funktion zum Anpassen von Text in Box an Linestring verwendet. In der Beispieldatei (im Link) habe ich meine Funktion entfernt, damit Sie meine Funktion nicht im Funktionseditor erstellen (um nicht zu befürchten, dass das Rechteck ein wenig ist etwas größer als auf den Druckbildschirmen oben). Wie auch immer, wenn Sie die Kartenprojektion ändern, ist das Rechteck nicht parallel zur Kartenleinwand und zum Text im Feld
Jane
Vielen Dank! Es wäre großartig, es noch allgemeiner zu machen. Soweit ich weiß, versuchen Sie, aus Punkten, bei denen die Punkte aus Attributwerten erstellt werden, eine Box zu erstellen. Wenn Sie diese Arbeit nach der Transformation ausführen möchten, müssen Sie auch die Offsets für die Punkte in Abhängigkeit von der Transformation berechnen. Ich denke, das ist viel zu kompliziert und führt wahrscheinlich zum Wahnsinn. Warum nicht einfach "Hintergrund zeichnen" beim Beschriften verwenden?
Bugmenot123
Ja, das ist es, was ich eigentlich will. Im Zeichnungshintergrund gibt es keine Funktion zum Erstellen benutzerdefinierter Rahmen für Formen - nur durchgezogene Linien, aber ich möchte Linien mit Punktmarkierungen erhalten. Weitere Informationen dazu füge ich in meiner Beschreibung der Frage hinzu
Jane

Antworten:

1

Keine Antwort auf den Fragentitel, aber möglicherweise eine Problemumgehung, um das gewünschte Ergebnis zu erzielen. Haben Sie versucht, eine SVG-Grafik eines Rechtecks ​​mit einem gepunkteten Rand zu erstellen und diese als Beschriftungshintergrund zu verwenden? Es wird nicht unabhängig auf der X- und Y-Achse skaliert, und die Anzahl der Punkte muss vordefiniert werden. Sie sollten jedoch Probleme vermeiden, die durch eine Neuprojektion verursacht werden.

Andy Harfoot
quelle