Forum QGIS
Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? - Wersja do druku

+- Forum QGIS (http://forum.quantum-gis.pl)
+-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html)
+--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html)
+--- Wątek: Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? (/thread-1256.html)

1 2


Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? - karliTToO - 17-11-2015

Witam,

wprowadzam dane liniowe i chciałbym, żeby długość danej lini automatycznie była dodana do tabeli atrybutów. Jest taka możliwość? Wytłumaczy ktoś jak to zrobić? Wolałbym aby długość sama została wprowadzona do tabeli atrybutów do danego wiersza, załóżmy z dokładnością 2 cyfr po przecinku. Będe musiał każdą linie mierzyć linijką i wprowadzać długość recznie?


RE: Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? - Binko - 18-11-2015

Jeśli zależy Ci na sposobie bardzo automatycznym (kończysz linię, i informacja o długości dodaje się do tabeli), to jeszcze nie znam takiego, ale może coś znajdę...

Natomiast możesz narysować wszystkie linie, jakie masz do narysowania a potem otwierasz tabelę atrybutów, klikasz w ikonkę "Kalkulator pól", a tam w lewej części na górze określasz parametry nowej kolumny dla długości linii (zaznaczone pole przy "Twórz nowe pole"). Nazwij kolumnę, wybierz typ "Liczby dziesiętne (real)", długość ustaw na 10, a dokładność na 2 (dwa miejsca po przecinku). W polu poniżej wpisz:
Kod:
$length
i kliknij ok. W ułamku sekundy obliczona będzie długość wszystkich linii w warstwie.


RE: Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? - karliTToO - 19-11-2015

zrobiłem tak jak napisałeś ale wyskakuję mi błąd "Brak głównego węzła. Parsowanie nie powiodło się?".


RE: Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? - Loozak - 10-11-2017

(18-11-2015, 10:37)Binko napisał(a): Jeśli zależy Ci na sposobie bardzo automatycznym (kończysz linię, i informacja o długości dodaje się do tabeli), to jeszcze nie znam takiego, ale może coś znajdę...

Natomiast możesz narysować wszystkie linie, jakie masz do narysowania a potem otwierasz tabelę atrybutów, klikasz w ikonkę "Kalkulator pól", a tam w lewej części na górze określasz parametry nowej kolumny dla długości linii (zaznaczone pole przy "Twórz nowe pole"). Nazwij kolumnę, wybierz typ "Liczby dziesiętne (real)", długość ustaw na 10, a dokładność na 2 (dwa miejsca po przecinku). W polu poniżej wpisz:
Kod:
$length
i kliknij ok. W ułamku sekundy obliczona będzie długość wszystkich linii w warstwie.

A jak zrobić żeby po przesunięciu punktu na linii długość automatycznie się przeliczyła?
Ewentualnie Jak zrobic warstwę z liniami które będa miały etykiety długości zmieniające się dynamicznie przy przesunięciu wierzchołka?


RE: Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? - xmaziax - 10-11-2017

(10-11-2017, 14:17)Loozak napisał(a): A jak zrobić żeby po przesunięciu punktu na linii długość automatycznie się przeliczyła?
Ewentualnie Jak zrobic warstwę z liniami które będa miały etykiety długości zmieniające się dynamicznie przy przesunięciu wierzchołka?

To co chcesz osiągnąć w pierwszym punkcie jest banalne w realizacji jeśli do przechowywania danych używasz dowolnej bazy danych (Postgis, Spatialite).
Obsługujesz to triggerami.

Dla SHP możesz użyć wtyczki AutoFields.

Na drugie pytanie masz już częściowo odpowiedź kilka postów wyżej.
Jako etykietę linii nie ustawiasz kolumny dlugosc (o ile taką stworzyłeś w kalkulatorze pól) lecz etykietujesz warstwę funkcją
Kod:
$lenght

Możesz ją od razu zaokrąglić do 2 miejsc po przecinku:
Kod:
round( $length,2)



RE: Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? - Loozak - 16-11-2017

(10-11-2017, 19:48)xmaziax napisał(a): [quote='Loozak' pid='6273' dateline='1510316230']
Na drugie pytanie masz już częściowo odpowiedź kilka postów wyżej.
Jako etykietę linii nie ustawiasz kolumny dlugosc (o ile taką stworzyłeś w kalkulatorze pól) lecz etykietujesz warstwę funkcją
Kod:
$lenght

Możesz ją od razu zaokrąglić do 2 miejsc po przecinku:
Kod:
round( $length,2)

I w jakich to jest jednostkach? Bo mi dziwne wartości pokazuje np. linia o dł. 182m ma wartość 0.002551


RE: Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? - Binko - 16-11-2017

Musisz zmienić układ projektu i/lub warstwy na jakiś metryczny (prawdopodobnie masz gdzieś WGS84), do tego w ustawieniach projektu zmień elipsoidę pomiaru odległości na GRS 1980, żeby dobrze liczył.


RE: Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? - Loozak - 20-11-2017

(16-11-2017, 17:01)Binko napisał(a): Musisz zmienić układ projektu i/lub warstwy na jakiś metryczny (prawdopodobnie masz gdzieś WGS84), do tego w ustawieniach projektu zmień elipsoidę pomiaru odległości na GRS 1980, żeby dobrze liczył.

To inaczej.
Zrobiłem sobie warstwę która na bieżąco aktualizuje długości podczas przesuwania punktu tylko nie pamiętam w jaki sposób
Po wie mi ktoś jak ją znów stworzyć? Jest dodana funkcja $length ale jako suma ?


RE: Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? - wojtek - 20-11-2017

Prawdopodobnie chodzi ci nie o warstwę, tylko o kolumnę w tabeli atrybutów. Gdy użyjesz wtyczki AutoFields to za każdą zmianą geometrii warstwy (np. przesunięcia któregoś węzła) zmieni ci się wartość np. długości danego elementu warstwy w odpowiedniej kolumnie (lenght - dla warstwy liniowej). Żeby wartość była w metrach to użyj układu o kodzie EPSG 2180 (układ, w którym jednostkami są metry, stosowany w Polsce).


RE: Automatyczne obliczanie długości lini i dodanie do tab. atrybutów? - Binko - 20-11-2017

Do stworzenia shp masz odpowiedź wyżej:
(10-11-2017, 19:48)xmaziax napisał(a): To co chcesz osiągnąć w pierwszym punkcie jest banalne w realizacji jeśli do przechowywania danych używasz dowolnej bazy danych (Postgis, Spatialite).
Obsługujesz to triggerami.

Dla SHP możesz użyć wtyczki AutoFields.

Poza tym nie bardzo rozumiem, co masz na myśli. Długość liczy się dla każdej linii osobno. Sumę musisz sobie zliczyć.