Próbuję odtworzyć fabułę Origin-Destination w następujący sposób:
Udało mi się przekształcić dane w tabelę MSOA do LAD i mogę narysować taką mapę dla jednego z początkowych plików MSOA.
Który raz, kiedy pozwolisz na (teraz absurdalne) odległości, ludzie dojeżdżają do pracy w Peak District, jest blisko.
Ale podoba mi się efekt, jaki autor osiągnął, „rozrzucając” linie. Oczywiście przy przepływach 522 i 371 nie mogę wybrać pojedynczej linii na osobę dojeżdżającą do pracy, ale fajnie byłoby stworzyć proporcjonalny łuk linii pokazujący liczbę osób odbywających podróż.
Pomyślałem, że będę mógł użyć Generatora Geometrii, ale bez konstrukcji pętli nie wydaje mi się, żebym robił postępy.
qgis-3
geometry-generator
Ian Turton
źródło
źródło
Odpowiedzi:
Wielkie wyzwanie!
Ta odpowiedź korzysta głównie z generatora geometrii i została napisana w QGIS 3.2. QGIS rozbił się (bez zapisania!) Tuż po tym, jak zbudowałem linie i prawie się poddałem, ale ostatnio używana lista wyrażeń uratowała dzień - kolejna korzyść z używania generatora geometrii
Zacząłem od dwóch zestawów punktów, jednego źródła i trzech miejsc docelowych. Miejsca docelowe są oznaczone liczbami:
Następnie wygenerowałem linie łączące punkt źródłowy ze wszystkimi miejscami docelowymi za pomocą warstwy wirtualnej przy użyciu następującego kodu:
Następnie użyłem następującego wyrażenia generatora geometrii, aby stylizować linie:
To pobiera każdą linię i stosuje następujące kroki:
tapered_buffer
aby zrozumieć, dlaczego jest to konieczne)Pisząc kroki, zdaję sobie sprawę, że konwersja do i z tablicy jest niepotrzebna, a cała manipulacja WKT może być wykonana za pomocą wyrażeń regularnych. To wyrażenie znajduje się poniżej, a jeśli
tapered_array
funkcję można zastąpić inną, można ją również zastosować w QGIS 2.18.źródło
Twoje pytanie mnie zainteresowało.
To rozwiązanie działa tylko dla QGIS 2.x w konsoli Python
Jak wspomniano w moim komentarzu, tutaj jest mój pomysł stworzenia łuku linii za pomocą Pythona.
Mam dwupunktową warstwę:
ja. Jeden posiadający kapitał (identyfikator, kapitał)
ii. Jeden trzyma miasta (identyfikator, miasto, osoby dojeżdżające do pracy)
Liczba osób dojeżdżających do pracy jest „rozdzielana na banknoty” i będą to linie tworzące łuk. A zatem 371 osób dojeżdżających do pracy to kombinacja 3x100, 1x50, 2x10 i 1x1 i łącznie 7 banknotów. Następnie linie są stylizowane stylem opartym na regułach.
Oto kod:
Wynik może wyglądać następująco:
AKTUALIZACJA: rozróżnienie mężczyzna / kobieta
Wyniki w 4 warstwach pamięci.
Wynik może wyglądać następująco:
Jedna rzecz, która nie jest idealna z kartograficznego punktu widzenia:
Wielkość łuku linii może na pierwszy rzut oka być irytująca, ponieważ większy łuk może reprezentować więcej osób dojeżdżających do pracy. Łuk może być większy przy mniejszej liczbie osób dojeżdżających do pracy (289 osób / 11 banknotów) niż inny przy większej liczbie osób (311 osób / 5 banknotów).
źródło