Jak automatycznie drukować kontury pośrednie za pomocą QGIS, GRASS GIS lub SAGA GIS?


10

Mapuję strome pasmo górskie. Mój główny interwał konturu wynosi 50 m, a mój pośredni interwał konturu wynosi 10 m. Na stromych obszarach odstęp 10 m jest zbyt mały, więc muszę wyjść z przedziału 10 m i zamiast tego użyć 20 m lub 25 m.

Czy istnieje sposób, aby to zrobić automatycznie w QGIS , SAGA GIS lub GRASS GIS ?

Odpowiedzi:


7

Można spróbować wykonać nakładkę linii konturowych za pomocą siatki nachylenia i pokazać tylko niektóre linie konturowe w zależności od średniej wartości nachylenia poniżej tej linii konturowej.


Ciekawe rozwiązanie! Czy zrobiłbyś połączenie przestrzenne, aby połączyć średnią wartość nachylenia z liniami konturowymi?
Simbamangu

@Simba Użyj statystyk strefowych. Jeszcze lepiej może być usunięcie linii konturu, których maksymalne nachylenie strefy jest zbyt strome.
whuber

2

O ile mi wiadomo, w QGIS nie ma automatycznego rozwiązania tego problemu. Powinno być jednak możliwe użycie mechanizmu renderującego opartego na regułach, aby określić, które kontury mają być drukowane, a które należy pominąć.


2

Jeśli dobrze rozumiem problem, pracujesz z Shapefile, który ma już wygenerowane wszystkie kontury. Powinieneś mieć tabelę atrybutów z wartościami konturu jako jednym z pól - na przykład „kontur”:

ID      contour
 1         1000
 2         1010
 3         1020
 4         1030

W QGIS możesz zrobić kilka rzeczy. Jednym z nich byłoby utworzenie kopii pliku Shapefile, a następnie usunięcie konturów, których nie chcesz:

  1. Rozpocznij sesję edycji, otwórz tabelę atrybutów i otwórz kalkulator pola.
  2. Wybierz „utwórz nowe pole” i ustaw je jako pole liczb całkowitych; nazywaj to „trzymaj”.
  3. Wpisz w polu „wyrażenie” wyrażenie, które da ci liczbę 1, jeśli zostaną spełnione odpowiednie warunki - chcesz zachować wszystkie kontury, które są wielokrotnościami 20. Zatem: contour LIKE '%00' OR contour LIKE '%20' OR contour LIKE '%40' OR contour LIKE '%60' OR contour LIKE '%80'(tego rodzaju funkcja „dopasowywania” nie jest ładna , ale QGIS nie ma funkcji matematyki modulo, która uczyniłaby to ładniejszym - myślę).
  4. Kliknij „OK”, a pojawi się nowa kolumna z 1, gdzie kontury są wielokrotnościami 20, a zerami, gdzie nie.
  5. Wyszukaj (wybierz) wszystkie wiersze, w których keep = 0, i usuń je. Twój nowy Shapefile teraz wykluczył każdy inny kontur.

Drugą opcją byłoby po prostu nie wyświetlanie konturów, których nie chcesz pokazywać. To jest trochę bardziej eleganckie.

  1. Otwórz okno dialogowe Właściwości i wybierz kartę Styl.
  2. Wybierz opcję „Na podstawie reguł” w lewym górnym rogu.
  3. Dodaj regułę (naciśnij przycisk „Dodaj”) dla konturów pasujących do żądanych warunków.
    • W oknie dialogowym Właściwości reguły wprowadź etykietę, na przykład „20”;
    • W polu Filtr wprowadź wyrażenie, które pasuje, podobnie jak powyższe: contour LIKE '%00' OR contour LIKE '%20' OR contour LIKE '%40' OR contour LIKE '%60' OR contour LIKE '%80'
    • Wybierz styl symbolu, którego chcesz użyć, a następnie kliknij przycisk OK i zastosuj styl.

W tym momencie jedynymi wyświetlanymi konturami będą te, które pasują do wyrażenia.

Wspaniałą rzeczą w drugiej opcji jest to, że możesz tworzyć reguły dla różnych skal - możesz mieć jedną regułę, gdy pominiesz pewną skalę, która pokazuje być może tylko 100-metrowe kontury („% 00” tylko w wyrażenie), a następnie kolejna reguła, która pokazuje kontury 20 metrów po dalszym powiększeniu itp.

Jeśli szukasz metody utworzenia nowego 25-metrowego konturu między 100-metrowymi konturami, prawdopodobnie lepiej byłoby utworzyć nowy plik konturów z cyfrowego modelu elewacji. Nie jestem pewien, czy istnieją metody, które w wiarygodny i prawidłowy sposób interpolowałyby nowy kontur o długości 25 m między innymi konturami.


0

Oto jak to zrobić, gdy mam plik kształtu konturu (lub bazę danych Spatialite) zawierający kontury w pionowych odstępach 10 metrów i chcę wykreślić tylko kontury, które występują w (powiedzmy) 50-metrowych odstępach.

Załaduj plik kształtu i przeprowadź zapytanie za pomocą tego fragmentu SQL: „(ELEV% 50) = 0”. Gdzie „ELEV” jest atrybutem zawierającym dane dotyczące wysokości.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.