Ich versuche, ein Origin-Destination-Diagramm wie folgt neu zu erstellen :
Ich habe es geschafft, die Daten in eine MSOA-zu-LAD-Tabelle zu mischen und kann eine Karte wie diese für eine der Ursprungs-MSOA zeichnen.
Was, wenn Sie einmal die (jetzt lächerlichen) Entfernungen berücksichtigen, die Menschen im Peak District zur Arbeit pendeln, ist nahe.
Aber ich mag den Effekt, den der Autor erzielt hat, indem er die Zeilen "gespreizt" hat. Natürlich kann ich bei Flüssen von 522 und 371 nicht eine einzige Linie pro Pendler wählen, aber es wäre schön, einen proportionalen Linienbogen zu erzeugen, um die Anzahl der Personen anzuzeigen, die die Reise machen.
Ich dachte, ich könnte den Geometrie-Generator verwenden, aber ohne ein Schleifenkonstrukt kann ich keine Fortschritte machen.
quelle
Antworten:
Eine große Herausforderung!
Diese Antwort verwendet hauptsächlich den Geometriegenerator und wurde in QGIS 3.2 geschrieben. QGIS stürzte ab (ohne dass ich gespeichert habe!), Kurz nachdem ich die Linien zum ersten Mal erstellt hatte und ich fast aufgegeben hätte, aber die kürzlich verwendete Ausdrucksliste hat den Tag gerettet - ein weiterer Bonus für die Verwendung des Geometriegenerators
Ich begann mit zwei Punktsätzen, einer Quelle und drei Zielen. Die Ziele sind mit den Zählungen gekennzeichnet:
Ich habe dann Linien erzeugt, die den Quellpunkt mit allen Zielen unter Verwendung einer virtuellen Schicht unter Verwendung des folgenden Codes verbinden:
Dann habe ich den folgenden Geometriegeneratorausdruck verwendet, um die Linien zu formatieren:
Dies dauert jede Zeile und führt die folgenden Schritte aus:
tapered_buffer
zu verstehen, warum dies erforderlich ist).Beim Schreiben der Schritte stelle ich fest, dass die Konvertierung zu und von einem Array nicht erforderlich ist und alle WKT-Manipulationen mit regulären Ausdrücken durchgeführt werden können. Dieser Ausdruck ist unten aufgeführt. Wenn die
tapered_array
Funktion durch eine andere ersetzt werden kann, kann dies auch in QGIS 2.18 verwendet werden.quelle
Ihre Frage hat mich neugierig gemacht.
Diese Lösung funktioniert nur für QGIS 2.x in der Python-Konsole
Wie in meinem Kommentar hier erwähnt, ist meine Idee, den Linienbogen mit Python zu erstellen.
Ich habe zwei Punktebenen:
ich. Einer, der das Kapital hält (id, Kapital)
ii. Einer hält die Städte (Ausweis, Stadt, Pendler)
Die Anzahl der Pendler wird "in Banknoten aufgeteilt" und dies sind die Linien, die den Bogen bilden. 371 Pendler sind also eine Kombination aus 3x100, 1x50, 2x10 und 1x1 und insgesamt 7 Banknoten. Anschließend werden die Linien durch ein regelbasiertes Styling gestaltet.
Hier ist der Code:
Das Ergebnis könnte folgendermaßen aussehen:
UPDATE: Unterscheidung männlich / weiblich
Ergebnisse in 4 Speicherschicht.
Das Ergebnis könnte folgendermaßen aussehen:
Eine Sache, die aus kartografischer Sicht nicht ideal ist:
Die Größe eines Linienbogens kann auf den ersten Blick irritierend sein, da ein größerer Bogen mehr Pendler darstellen könnte. Ein Bogen kann mit weniger Pendlern (289 Pendler / 11 Banknoten) größer sein als ein anderer mit mehr Pendlern (311 Pendler / 5 Banknoten).
quelle