Mam warstwę MultiLineStringZM w bazie danych sqlite i próbuję wizualizować miary lub wartości mw wierzchołkach. Próbowałem wyszukać informacje o tym, jak to zrobić w QGIS, a wszystko, co udało mi się zebrać, to to, że nie jest to możliwe bezpośrednio z warstwy liniowej i że punkty należy wyodrębnić do osobnej warstwy.
Użyłem Vector
-> Geometry Tools
->, Extract nodes
aby utworzyć wielopunktową warstwę reprezentującą wierzchołki mojej warstwy wielościeżkowej, ale proces traci wartości m wierzchołków. Potrzebuję zachować wartości m, albo zapisując wartość m jako atrybut punktu, czy coś innego?
Wewnętrznie mamy narzędzie wiersza poleceń, które konwertuje znaczniki linii na plik kształtu punktu z wartościami m przechowywanymi jako atrybuty w każdym punkcie, i użyłem tego do sprawdzenia, czy do m wierzchołków przypisano wartości m, i mogłem użyć że jeśli będę musiał, ale jeśli to możliwe, byłoby miło, gdyby można to zrobić bezpośrednio w QGIS.
EDYCJA - Powtarzając to, co powiedziałem powyżej, ale ponownie podkreślając fakt, że mamy narzędzie wiersza poleceń, które może osiągnąć wyniki, których szukam, wykorzystujące biblioteki GDAL, więc rozwiązanie pokazujące tylko częściową odpowiedź w PyQGIS nie jest odpowiedzią, której szukam. Szukam wbudowanego narzędzia, wtyczki gotowej dla QGIS lub pełnego skryptu, który może wyodrębnić (nie tworzyć / generować) i wizualizować wartości m z geometrii MultiLineStringZM lub LineStringZM.
źródło
Odpowiedzi:
Z tego, co mogę znaleźć, nie wydaje się, aby istniało istniejące rozwiązanie dla tej dokładnej sytuacji, ale nadal chciałem móc to zrobić w QGIS, więc zdecydowałem się na skryptowanie w języku Python.
Przewodnik do pisania algorytmów przetwarzania można znaleźć tutaj https://docs.qgis.org/2.18/en/docs/user_manual/processing/scripts.html
Aby użyć tego kodu, otwórz Przybornik przetwarzania, następnie rozwiń Skrypty, a następnie rozwiń Narzędzia. Wybierz „Utwórz nowy skrypt”, a następnie skopiuj i wklej poniższy kod do okna skryptu (zachowaj ostrożność podczas kopiowania i wklejania kodu python, ponieważ białe znaki są istotne pod względem składniowym. Jeśli masz problemy, umieść kod w edytorze tekstu, który pokazuje białe znaki i upewnij się że skopiował poprawnie). Zapisz go gdziekolwiek chcesz, a na górze okna znajduje się przycisk wykonania skryptu. Po zapisaniu możesz „Dodaj skrypt z pliku” i na stałe mieć skrypt pod „Skrypty użytkownika”.
Kiedy pojawi się okno przetwarzania, wybierz warstwę zawierającą geometrię wektorową i wybierz Uruchom. Skrypt zachowuje się tak samo jak „Wyodrębnij węzły”, z tym wyjątkiem, że dodaje kolumnę o nazwie
MValues
i lub wZValues
zależności od tego, co jest dostępne w geometrii wejściowej.źródło
W przypadku QGIS 3.0 lub nowszego to zadanie jest banalne. W „Processing Toolbox” (Otwórz za pomocą Ctrl + Alt + T lub Processing -> Toolbox) wyszukaj „Extract Vertices” i uruchom ten algorytm.
Wybierz geometrię linii lub wielokąta M lub ZM jako warstwę wejściową i uruchom.
Wierzchołki zostaną wyodrębnione z nienaruszonymi wartościami M i Z w zależności od tego, co jest w oryginalnej geometrii.
Jeśli wartość M jest potrzebna jako pole w tabeli atrybutów, wówczas można użyć kalkulatora pola z wyrażeniem podobnym
m($geometry)
źródło