Forum QGIS
obliczanie azymutu/kierunku dla poligonu - 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: obliczanie azymutu/kierunku dla poligonu (/thread-1419.html)

1 2


RE: obliczanie azymutu/kierunku dla poligonu - pitt - 03-01-2017

cześć,
opcja "Oriented minimum bounding box", której do tej pory nie znalem, jest faktycznie pomocna. Jednak w ten sposób otrzymujemy prostokąty gdzie każdy z prostokątów (poligonów) ma dwie identycznie linie, co stwarza problem dla rozwiązania zaproponowanego przez Italiano: View => Select by expression
Dodatkowo wciąż brak jest linii, która faktycznie przecina centrycznie poligon.
W jaki sposób można wyznaczyć taka linie dla utworzonych przez "Oriented minimum bounding box" prostokątów, tzn. linie która przebiega dokładnie przez środek prostokąt po jego dłuższej osi.

PS
załącznik dodajesz z menu "odpowiedz" lub "odpisz", tam na dole (niebieskie okno) istnieje opcja dodania załącznika "Załączniki - Nowy załącznik".


RE: obliczanie azymutu/kierunku dla poligonu - pitt - 18-01-2017

witam,
jest ktoś w stanie dalej pomoc?
"W jaki sposób można wyznaczyć taka linie dla utworzonych przez "Oriented minimum bounding box" prostokątów, tzn. linie która przebiega dokładnie przez środek prostokąt po jego dłuższej osi."


RE: obliczanie azymutu/kierunku dla poligonu - tomalos - 25-01-2017

Przerobiłem cały proces na przykładzie kilku rezerwatów przyrody.
[attachment=393]

1. Utworzyłem zorientowane minimalne "skrzynki" (OMBB).

2. Złączyłem je z według lokalizacji z rezerwatami.

3. Zamieniłem na linie (narzędzie: Poligony na linie).

4. Linie rozbiłem na pojedyncze odcinki (narzędzie: Rozdziel linie).

5. W kalkulatorze pól utworzyłem pole z długością odcinka z pewnym zaokrągleniem (z dokładnością do metra, liczby całkowite).

6. Wybrałem zapytaniem dwa najkrótsze odcinki z OMBB każdego rezerwatu, te zaokrąglone z tabeli atrybutów (nie na podstawie geometrii ($length), choć też by można stosując "round"). Ze względu na zaokrąglenie dla każdego rezerwatu dwa najkrótsze odcinki OMBB mają taką samą długość, przez co dla każdego rezerwatu zaznaczą się dwa odcinki.
[attachment=397]

7. Z zaznaczonych utworzyłem nową warstwę (rozdzielone_short).

8. W kalkulatorze pól utworzyłem pole "id" z unikalnym id (wiersze > $id).

9. Utworzyłem warstwę punktową (middle_pft) ze środkiem każdego odcinka (narzędzie: Środek ciężkości).
[attachment=398]

10. W tym momencie znowu gubią się atrybuty, więc trzeba złączyć według lokalizacji.

11. Połączyłem punkty tworząc linie (wtyczka: Points to Path).
[attachment=399]

12. Na koniec zostaje dodanie azymutu: degrees (azimuth(point_n($geometry,1),(point_n($geometry,2)))) w kalkulatorze pól.

[attachment=400]

Pewnie można to jakoś uprościć ale mi udało się zrobić tak.

Widzę w tej ścieżce postępowania dwa problemy:
1. Nie jest rozstrzygnięty zwrot azymutu, przykładowo nie wiadomo czy linia biegnie z północy na południe czy z południa na północ, obrazowo pisząc nie wiadomo gdzie w grobie są nogi a gdzie głowa. Chyba, że pitt poda jeszcze ten parametr to pomyślimy dalej.
2. Wyznaczanie azymutu za pomocą OMBB sprawdzi się w przypadku lekko wydłużonych i w miarę zwartych obiektów. Przy obiektach zwartych i niewydłużonych (zbliżone do koła czy kwadratu) oraz rozbudowanych (powiedzmy prostokąt z jakimś długim cienkim wąsem) może być mylące. Widać to w przypadku rezerwatu Lubiaszów na ostatnim załączniku, gdzie jako azymutem wydaje się być linia w kierunku zbliżonym do N (lub S). Rozwiązaniem może być wstępna generalizacja poligonów albo utworzenie zorientowanych hmm.... "oriented minimum bounding elipses"? Da się coś takiego zrobić? I dopiero dla tych "oriented minimum bounding elipses" utworzenie OMBB... Tak sobie filozofuję, może kogoś to natchnie Smile


RE: obliczanie azymutu/kierunku dla poligonu - pitt - 10-02-2017

witam,
dzięki za wskazówki. Groby są zorientowane w kierunku zachodnim (z głowa na zachód).
Ja chwilowo utknąłem w punkcie 6, tzn. nie jestem w stanie wybrać zapytaniem ["length" = minimum( "length", "ID" )] dwóch najdłuższych odcinków związanych z tym samym ID.


RE: obliczanie azymutu/kierunku dla poligonu - tomalos - 13-02-2017

Mi zaznaczenie wyrażeniem po długości z uprzednio utworzonej kolumny z długością działa i zaznacza dokładnie połowę z istniejących linii (po dwie najkrótsze)
Kod:
"length"  =  minimum( "length" , "gid")

Natomiast jak zaznaczam długością obliczaną z geometrii czy to zaokrąglając:
Kod:
round ($length = minimum(  $length , "gid"),1)
czy nie:
Kod:
$length = minimum(  $length , "gid")
to kilka linii zostaje pominiętych.

Żeby tego uniknąć zrobiłem tak:
Kod:
$length < (minimum(  $length , "gid")+0.1)
i zrobił co trzeba, więc może tak spróbuj.

Żeby nie było idealnie to jak wywołuję "kalkulator pól", czy narzędzie "zaznaczenia za pomocą wyrażenia" z narzędzi geoprocesingu to też mi nie działają funkcje z grupy "Agregates" z kalkulatowa pól, przez co nie da się tego wykorzystać do stworzenia modelu. Jak otwieram z menu to działa normalnie. Chciałem zrobić model, żeby ci podesłać i sprawdzić czy u ciebie zadziała to co działa u mnie, ale nie działa nawet u mnie Smile.
[attachment=405]


RE: obliczanie azymutu/kierunku dla poligonu - pitt - 11-08-2017

witam,
powracam jeszcze na krotko do tego watku
Mam problem z pkt. 10 (lista Tomalosa), a mianowicie nie jestem w stanie zlaczyc/przypisac atrybutow wg. lokalizacji.
Korzystam - podobnie jak w pkt. 2 - z narzedzia "Zlacz atrybut wg lokalizacji" [attachment=464] [attachment=465]i niestety ale na 360 obiektow (zolte punkty), jedynie 176 atrybutow zostaja ponownie przypisane (czerwone punkty) [attachment=463].
Dlaczego?


RE: obliczanie azymutu/kierunku dla poligonu - tomalos - 12-08-2017

Może spróbuj zmienić parametr "Dokładność" na kilkadziesiąt centymetrów.


RE: obliczanie azymutu/kierunku dla poligonu - pitt - 15-08-2017

zmieniając parametr dokładności (próbowałem tutaj wielu wariantów) uzyskuje błędny wpis wartości w tabeli atrybutów, tzn. niektore z wartości są wielokrotnie przypisywane innym, pomimo unikatowego ID lub przypisywana jest wartosc NULL.
[attachment=466][attachment=467]
Wynika to najprawdopodobniej wlasnie ze zmiany paramertu "dokladnosci", przez co niektore wartosci sa "przyciagane / przypisywane" (np. w obrebie kilkudziesieciu cm) do tych niewlasciwych.
Spotkal sie juz ktos z was z podobnym problemem?


RE: obliczanie azymutu/kierunku dla poligonu - tomalos - 20-09-2017

Wiem, że nie popisałem się refleksem ale może spróbuj zamiast punktów użyć ich buforów o jakimś małym promieniu (kilka, kilkanaście lub kilkadziesiąt centymetrów).