Как автоматически построить промежуточные контуры с помощью QGIS, GRASS GIS или SAGA GIS?


10

Я картирую крутой горный хребет. Мой основной контурный интервал составляет 50 м, а мой промежуточный контурный интервал - 10 м. В крутых районах интервал в 10 м слишком мал, поэтому мне нужно оставить интервал в 10 м и использовать вместо него 20 или 25 м.

Есть ли способ сделать это автоматизированным в QGIS , SAGA GIS или GRASS GIS ?

Ответы:


7

Вы можете попытаться наложить ваши линии контура на сетку уклона и показать только определенные линии контура в зависимости от среднего значения уклона ниже этой линии контура.


Интересное решение! Вы бы сделали пространственное соединение, чтобы связать среднее значение уклона с контурными линиями?
Симбамангу

@ Симба Используйте зональную статистику. Возможно, будет еще лучше удалить контурные линии, чей максимальный зональный наклон слишком крут.
whuber

2

Насколько я знаю, в QGIS нет автоматического решения этой проблемы. Однако должна быть возможность использовать средство визуализации на основе правил, чтобы указать, какие контуры должны быть нанесены, а какие нет.


2

Если я правильно понимаю проблему, вы работаете с шейп-файлом, в котором уже созданы все контуры. У вас должна быть таблица атрибутов со значениями контура в качестве одного из полей - например, «контур»:

ID      contour
 1         1000
 2         1010
 3         1020
 4         1030

В QGIS вы можете сделать пару вещей. Один из них - создать копию Shapefile, а затем удалить ненужные контуры:

  1. Запустите сеанс редактирования, откройте таблицу атрибутов и откройте калькулятор полей.
  2. Выберите «создать новое поле» и сделайте его целым числовым полем; назовите это «держать».
  3. Введите в поле «выражение» выражение, которое даст вам номер 1, если соблюдены правильные условия - вы хотите сохранить все контуры, кратные 20. Таким образом: contour LIKE '%00' OR contour LIKE '%20' OR contour LIKE '%40' OR contour LIKE '%60' OR contour LIKE '%80'(такая функция «сопоставления» не очень хороша , но в QGIS отсутствует математическая функция по модулю, которая сделала бы это лучше - я думаю).
  4. Нажмите «ОК», и у вас будет новый столбец с 1, где контуры кратны 20, и нули, где нет.
  5. Ищите (выбирайте) все строки, где сохраняются = 0, и удаляйте их. Ваш новый шейп-файл теперь исключил все остальные контуры.

Второй вариант - просто не отображать контуры, которые вы не хотите показывать. Это немного элегантнее.

  1. Откройте диалоговое окно «Свойства» и выберите вкладку «Стиль».
  2. Выберите «На основе правил» в левом верхнем углу.
  3. Добавьте правило (нажмите кнопку «Добавить») для контуров, соответствующих требуемым условиям.
    • В диалоговом окне «Свойства правила» введите метку, например «20»;
    • В поле «Фильтр» введите соответствующее выражение, как показано выше: contour LIKE '%00' OR contour LIKE '%20' OR contour LIKE '%40' OR contour LIKE '%60' OR contour LIKE '%80'
    • Выберите стиль символа, который вы хотите использовать, затем нажмите OK и примените стиль.

В этот момент отображаются только те контуры, которые соответствуют выражению.

Отличительной особенностью второго варианта является то, что вы можете создавать правила для разных масштабов - у вас может быть одно правило, когда вы уменьшаете масштаб до определенного масштаба, который показывает, возможно, только 100-метровые контуры («% 00» только в выражение), а затем еще одно правило, которое показывает 20-метровые контуры при дальнейшем увеличении и т. д.

Если вы ищете способ создания нового 25-метрового контура между 100-метровыми контурами, то вам, вероятно, будет лучше создать новый файл контура из цифровой модели рельефа. Я не уверен, существуют ли какие-либо методы, которые надежно и правильно интерполировали бы новый 25-метровый контур между другими контурами.


0

Вот как я это делаю, когда у меня есть шейп-файл контура (или база данных Spatialite), содержащий контуры с вертикальными интервалами 10 метров, и я хочу построить только контуры, которые происходят, скажем, с интервалами 50 метров.

Загрузите шейп-файл и запросите его, используя этот фрагмент SQL: '(ELEV% 50) = 0'. Где «ELEV» - это атрибут, содержащий данные высот.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.