In QGIS gibt es zwei Shapefiles, die die sich bewegenden Daten zwischen Zellen und einer zusätzlichen Ebene darstellen (siehe Abbildung unten)
Verschieben von Daten definiert durch:
Polygon
"LayerA"
(transparente Quadrate mit roter Kontur). Daneben bezieht es sich auch auf Kreise, die die Bewegungen innerhalb von Zellen darstellen, visualisiert an der Position von"LayerA"
Geocentroiden .Polylinien-Layer
"Flows"
(gelbe / graue Pfeile) vermitteln Werte über Verbindungen zwischen Geozentralen von"LayerA"
Features
Zielschicht:
Außerdem habe ich bereits "FLUX"
Werte innerhalb von Zellen von "LayerA"
in "LayerB"
Polygone übertragen und verschoben, siehe meine vorherige Frage: Geerbte Werte zwischen Polygonen in QGIS? . Es wurde mit der %
von $area
Berechnung gemacht.
Es könnte eine sinnvolle Lösung / Ansatz der Übertragung / Übertragung / Transformation fließen werden Verbindungen die durch "Flows"
und ihre Werte von Relationen von "LayerA"
in Relationen von dargestellt werden "LayerB"
.
Wie kann ich diese Verbindungen als Polylinien erreichen?
Darüber hinaus erben neue Nachrichtenflüsse einen ähnlichen Stil wie "Flows"
.
Auf Anfrage kann ich ein Muster der Daten zur Verfügung stellen.
Flüsse existieren nicht zwischen Features von "LayerA"
, sondern zwischen Features von "LayerB"
. Das Hauptziel ist es, das Attribut "FLUX"
(dh von / bis) für Verbindungen zwischen "LayerB"
möglichen als Tabelle / Ursprung-Ziel-Matrix zu erreichen.
Es gibt einige Anforderungen / Kriterien , die eingehalten werden sollten:
1. Es gibt keine Flussverbindungen zwischen den Teilen der Features (gelb markiert) in derselben Zelle
2. Es gibt keine Verbindungen zwischen demselben Feature, auch wenn sich seine Teile in verschiedenen Zellen befinden
3. Verbindungen bestehen zwischen Teilen von Features "LayerB"
(basierend auf der "Union"
Ausgabe), wenn sie sich vollständig innerhalb zweier unterschiedlicher "LayerA"
Zell-Features befinden
4. Neu"FLUX"
Wert, der übermittelt wird, wird wie in der Abbildung unten gezeigt berechnet.
Beispielsweise besteht eine Verbindung zwischen zwei Zellen I
und II
, wo "FLUX"
ist 100
. Unter der Annahme , andere Werte, die "NEW_FLUX"
zwischen A'
und B''
wird rund 1.5625
. 100
ist nur ein einziges Beispiel.
Verweise:
- Geerbte Werte zwischen Polygonen in QGIS?
- Anpassen von Flow-Map-Stilen in QGIS 2
- Berechnen Sie die proportionale Fläche des Polygons innerhalb des Polygons einer anderen Ebene
- Freie und Open Source GIS Ramblings | Bewegungsdaten in GIS: Probleme und Ideen
- Erhalt der Geometrie mit Virtual Layer in QGIS 2
quelle
Antworten:
Theoretisch ist dies mit den virtuellen Ebenen möglich (bei Shapefiles ist der Prozess besonders lang, aber wenn sich die Ebenen in einer räumlichen Datenbank befinden, ist dies meiner Meinung nach viel schneller).
Hier der Code:
Die grafische Ausgabe wird so aussehen
Das Ergebnis wurde manuell getestet. Der
"FLUX"
Wertunterschied ist vernachlässigbar.Die endgültige Ausgabe übernimmt Stile von
"Flow"
und sieht so ausIch empfehle, es mit wenigen Daten zu testen. Wenn es für große Datenmengen zu lange dauert, führen Sie die Abfragen schrittweise aus (
"inter_ab"
,"new_flux"
), speichern Sie das Ergebnis und führen Sie die nächste Abfrage aus.quelle
Polygon_b
Layer. Das Schlüsselfeld istid_geofla
. Ich habe die Korrektur gemacht.Sie können eine Verknüpfung zwischen den drei Ebenen erstellen und dann nach aggregieren
layerB
. Es können wahrscheinlich virtuelle Schichten verwendet werden. Ich bin nicht sicher, ob die wichtigen Daten inlayerA
oder in derflow
Schicht sind. Hier ist eine (ungetestete) Möglichkeit:quelle
"Flows"
.sum(f.flow_var)
oder sogarsum(fl.flow_var * a.poly_var)