Generierte Linien außerhalb der Kartenausdehnung mit QGIS anzeigen?

12

Ich habe eine OD-Flusskarte mit dem QGIS-Geometriegenerator mit dem folgenden Ausdruck gezeichnet:

make_line( centroid( $geometry ),
centroid( geometry( get_feature( 'Layer2', 'Attribute1', attribute(
           $currentfeature, 'Attribute2') ) ) ) )

Ich habe alles in Ordnung, indem ich die Breite meiner Linien anhand von Attributen definiere.

Wenn ich auf den "Hub" zoome, werden Linien, die mit Orten außerhalb des Kartenbereichs verknüpft sind, nicht angezeigt. Ich denke, das liegt daran, dass die Features nicht auf der Karte angezeigt werden sollen.

Ich habe versucht, die Option "Ausdehnung der Clip-Features auf Leinwand" im erweiterten Menü zu deaktivieren, sowohl im "Geometrie-Generator" als auch in den "Linien" -Ebenen, aber sie wird immer noch nicht angezeigt.

Beim Zoomen auf den Hub

Wenn entzaubert

Ich möchte, dass alle meine Linien angezeigt werden, auch wenn ich auf den Hub gezoomt habe.

mamouthautapis
quelle
Das ist nicht hilfreich ... aber ich habe das gleiche Problem mit dem Flow-Mapping-Ansatz von Underdark. Es muss etwas über die Art und Weise sein, wie dichte Geometrie gerendert wird. Es ist nur ratsam, mit der Attributbreite für die Karte auf lokaler Ebene zu spielen.
Andrew Tice
Möglicherweise können Sie Ihre Daten hochladen (shp ...), um Ihre Schritte zu replizieren und eine Antwort zu erhalten.
César Arquero
1
Shapefile kommt von hier: IGN und der verbundene Tisch von INSEE
mamouthautapis
Möglicherweise kann das Segmentieren der Linie ein Hack sein, damit sie auf der Karte angezeigt wird, wenn Linien nur angezeigt werden, wenn sich beide Enden in der Nähe der Kartenausdehnung befinden. Das Grass-Tool 'v.split.length' erledigt vielleicht die Arbeit.
Julian
1
Ist dies das gleiche Problem wie bei mir (wenn es eine einfache Möglichkeit gibt, dieses Problem zu verstehen - wenn nicht, ignorieren Sie mich): Ich wollte einen Punktdatensatz mit der gesamten Menge der generierten Punkte anzeigen, die 300 km nach Osten und 600 km nach Osten verschoben sind Norden im Vergleich zu den tatsächlichen Punkten. Es funktioniert - aber nur, wenn es herausgezoomt ist, sodass sich die ursprünglichen Punkte innerhalb des Kartenbereichs befinden. Sobald Sie auf die Menge der generierten Punkte zoomen (indem Sie die tatsächlichen Punktpositionen außerhalb der Zeichenfläche verschieben), verschwinden die generierten Punkte. (QGIS 2.14)
Rostranimin

Antworten:

2

Das Problem dabei ist, dass es keine tatsächlichen Daten gibt, die besagen, dass hier eine Linie ist. Ihr Ausdruck ist Teil des Ebenenstils und wird beim Rendern nur angetroffen, wenn auch zwei anwendbare Punkte gerendert werden.

Verwenden Sie das Werkzeug Abstand zum nächsten Hub , das sich in der Verarbeitungs-Toolbox unter Vektoranalysewerkzeuge befindet. Ich stelle fest, dass Sie bestimmte Polygone für Ihre Speichen auswählen und die Linien gemäß anderen Attributen stylen. Dies ist möglich, aber Sie müssen ein paar Dinge tun, um sich darauf vorzubereiten. Glücklicherweise verwendet das Tool bei der Auswahl von Polygoneingaben automatisch Zentroide.

  1. Vektorauswahlwerkzeuge > Nach Attributen extrahieren
    • Eingabeebene: 'LAYER_1'
    • Auswahlattribut: 'ATTRIBUTE_1'
    • Betreiber: =
    • Wert: 'Wert, der sich auf das Hub-Polygon bezieht'
    • Extrahiert (Attribut): 'HUB'

  2. Vektorauswahlwerkzeuge > Nach Attributen extrahieren
    • Eingabeebene: 'LAYER_1'
    • Auswahlattribut: 'ATTRIBUTE_2'
    • Betreiber: nach Bedarf ausgewählt
    • Wert: 'Wert (e) für Speichenpolygone'
    • Extrahiert (Attribut): 'SPOKES'

  3. Vektoranalysewerkzeuge > Entfernung zum nächsten Hub
    • Quellpunktebene: 'SPOKES'
    • Ziel-Hub-Layer: 'HUB'
    • Attribut " Hub-Layer-Name ": Erstellt in der Ausgabe ein Feld "Hub-Name" basierend auf dem ausgewählten Attribut, falls in der Eingabeebene mehrere Hubs angegeben sind
    • Ausgabeformtyp: Linie zum Hub
    • Maßeinheit: Meter
    • Nabenabstand: "OUTPUT_LAYER_NAME"

Die resultierende Ausgabe behält alle Attribute der Ebeneneingabe "SPOKES" bei, sodass die für das Linienstil erforderlichen Attribute weiterhin vorhanden sind. Als eigene Vektorebene bleiben die Linien in allen Zoomstufen sichtbar, unabhängig von der Sichtbarkeit eines der beiden Endpunkte.

Wenn Sie mit dem grafischen Modellierer vertraut sind, können Sie diese Schritte sogar in einen einzigen Prozess integrieren, um Ihren Arbeitsbereich nicht mit unnötigen Ebenen zu überladen.

JoshC
quelle
3

Finden Sie die folgende Problemumgehung: Verwenden Sie eine zusätzliche virtuelle Ebene anstelle eines Geometriegenerators , um die Linien anzuzeigen.

Definition der virtuellen Schicht:

select m.FID, make_line(.....) as geometry from my_layer m

(Originalgeometrie kann referenziert werden mit m.geometry)

Um sicherzustellen, dass der virtuelle Layer aktualisiert wird, wenn my_layer bearbeitet wird, wechseln Sie zu Layereigenschaften | Abhängigkeiten und stellen Sie sicher, dass my_layer aktiviert ist (dies ist standardmäßig ausgegraut).

Mesa
quelle