Quantum GIS: как это сделать?

ГИС Оставить комментарий

У многих моих друзей и знакомых возникает необходимость в создании тех или иных карт. Прилагаемые для этого усилия могли бы быть существенно сокращены, обладай они необходимыми навыками. Но, к сожалению, университетские курсы почему-то не позволили эти навыки приобрести, а читать документацию и форумы готовы далеко не все.

Этот пост — первый в серии постов «как это сделать?», посвящённых созданию карт в программе Quantum GIS. Недавно вышедшая версия 1.8 уже предоставляет достаточно богатые возможности в области «социально-экономической» картографии (то, что по-английски называется thematic mapping). Мне кажется, что в силу достаточной простоты и свободности распространения, эта система предпочтительнее для тех, кто только начинает работу с ГИС, и кому надо «просто сделать несколько карт».

Я постараюсь на примере нескольких карт продемонстрировать приёмы работы, прежде всего нацеливаясь на то, чтобы при необходимости человек мог воспроизвести соответствующие действия для создания нужной ей/ему карты. Естественно, я не смогу учесть все возникащие нюансы, но постараюсь упомянуть максимум того, о чём смогу вспомнить.

Разумная критика приветствуется, на возникающие вопросы я постараюсь ответить.

В качестве «модельного объекта» я выбрал Новую Зеландию. Карты, про создание которых я собираюсь написать, выглядят так:

Сегодня — про первую из них, «обзорную».

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

Выполняя все нижеперечисленные операции, стоит периодически сохранять свой проект. QGIS хоть и стал существенно стабильнее, всё-таки иногда «вылетает».

Где брать данные?

Благодаря усилиям университета Wisconsin—Madison, проблем с исходными данными для карт, с тем, что называется «подложкой», гораздо меньше, чем могло бы быть. Коллекция согласованных векторных и растровых данных хранится на сайте www.naturalearthdata.com и можно только посетовать на то, что нет такой же коллекции русифицированных данных. Но для наших целей подойдёт и то, что есть. В принципе, можно скачивать с этого сайта данные фрагментами по мере необходимости, но если собираешься делать много карт по разным частям света, имеет смысл всё скачать сразу единым архивом.

«Обрезка» данных

Данные в файлах с NaturalEarthData покрывают сразу всю планету и «заточены» под карты разного масштаба. Нас интересует самый крупный из имеющихся масштабов (1:10m), но «таскать» с собой данные всего мира в этом масштабе будет достаточно накладно. Поэтому из общих файлов с данными по всему миру лучше «вырезать» только то, что нам действительно нужно.

Продемонстрирую это на примере слоя ne_10m_admin_0_countries — собственно, границы стран. Загрузка слоя в ГИС осуществляется нажатием на кнопку «Добавить векторный слой»: . Вот как он выглядит загруженным ГИС:

Есть разные способы «обрезать» данные, но, пожалуй, самый простой и подходящий в нашем случае — просто выделить прямоугольником нужные объекты и сохранить (это не подойдёт, в случае, если какие-то объекты должны попасть в «рамку» лишь частично, но в таких случаях тоже есть возможность всё сделать, просто чуть хитрее). Для выделения выбираем соответствующий инструмент на панели: (если эта кнопка не видна, стоит настроить панель так, чтобы она была видна, а если вместо выбора прямоугольником есть какой-то другой выбор — нажать на стрелочку рядом и выбрать нужный инструмент из списка).

Выбранная Новая Зеландия выглядит так:

После этого нажимаем в списке слоёв правой кнопкой мыши на слой и выбираем в меню пункт «Сохранить выделение как...». В открывшимся диалоговом окне надо выбрать имя и место хранения для нового файла (кнопка «Обзор»), кодировку (я предпочитаю явно указывать UTF-8, а не доверять настройке «System») и поставить галочку «Добавить сохранённый слой на карту».

В результате получим векторный слой, в котором есть данные только по НЗ.

После этого можно удалить слой с данными по миру, который уже не очень нужен, выбрав его в списке слоёв и нажав на кнопку удаления слоя: .

Аналогичные действия произведём для слоёв: ne_10m_populated_places_simple, ne_10m_roads, ne_10m_lakes, ne_10m_rivers_lake_centerlines, ne_10m_coastline, получив, соответственно, слои: NZ_cities, NZ_roads, NZ_lakes, NZ_coast. В итоге набор слоёв выглядит следующим образом:

Оформление

Чтобы всё это выглядело менее странно, надо прописать более адекватное оформление для слоёв, а также расположить их в «правильном» порядке — они отрисовываются «снизу вверх».
Я выбрал порядок слоёв NZ_cities, NZ_roads, NZ_lakes, NZ_rivers, NZ_coast, NZ_admin0. Порядок слоёв меняется просто перетаскиванием их в списке вверх или вниз.

Оформление слоя задаётся в его свойствах. Чтобы попасть в соответствующее окно, надо просто два раза щёлкнуть на слое или выбрать в меню по правой кнопке пункт «Свойства». В этом окне нас интересует вкладка «Стиль»:

В самом простом варианте цвет объектов слоя задаётся нажатием на кнопку «Изменить» с цветным квадратиком в середине окна. Если же хочется чего-то более хитрого, например, для многоугольников задать не только цвет закраски, но и цвет границы, то надо нажимать на кнопку «Изменить...» с гаечным ключом слева. После всех настроек моя карта выглядит вот так:

Подписи для городов

Наиболее естественный для ГИС способ подписи объектов на карте предполагает, что эти подписи прописаны в качестве атрибутов тех объектов, которые мы хотим подписать. Если мы хотим подписать русские названия городов, то их сначала придётся внести в таблицу атрибутов слоя NZ_cities, потому что пока их там нет. Таблица атрибутов слоя открывается нажатием на кнопку: . Откроется вот такое окно, напоминающее электронную таблицу:

Для внесения русских названий городов можно, например, использовать столбец namealt, который сейчас всё равно пустой. Чтобы что-то менять в таблице, надо сначала включить режим редактирования, нажав внизу таблицы кнопку: . После этого можно исправлять значения ячеек как в обычной электронной таблице. Закончив внесение изменений, надо снова нажать на эту же кнопку и выключить режим редактирования.

В итоге таблица выглядит так:

Теперь её можно закрыть и перейти к настройке, собственно, подписей. Настройка подписей открывается (при выбранном слое, для которого хотим сделать подписи) нажатием на кнопку: . Откроется диалоговое окно:

Чтобы хоть что-то стало активным, надо поставить галочку на «Подписывать объекты слоя значением поля» и выбрать поле namealt, которое мы только что заполнили. Здесь же можно настроить шрифт, цвет и размер подписей. Кроме того, можно включить Буферизацию — белый ореол вокруг подписей. Это принято делать на цифровых картах, но на бумажных оно не всегда хорошо смотрится, так что я стараюсь не злоупотреблять. В итоге, настройки выглядят так:

Карта с подписями выглядит вот так:

Видно, что подписи иногда заезжают на «кружочки», для подписи Окленда, например, места не нашлось. В целом, автоматика справляется не так плохо, но бывает необходимость в том, чтобы её отключить. Это делается во второй вкладке диалогового окна настройки подписей, которая называется «Дополнительно»:

Здесь можно установить Отступ подписей, например, в 1мм, а также потребовать показа всех подписей. Для этого надо прокрутить окно вниз до кнопки «Параметры алгоритма». При нажатии на неё появится ещё одно окно:

в котором надо поставить галочку на «Показывать все подписи (включая накладывающиеся)». Теперь уже будут отображены все подписи (хотя некоторые и смотрятся не лучшим образом пока, но это поправится чуть позже).

Значки для городов
В зависимости от размера города хорошо бы менять значок. Для этого надо настроить специальным образом оформление слоя городов. Во вкладке «Стиль» Свойств слоя NZ_cities выбираем вместо «Обычный знак» пункт «Градуированный знак» и указываем поле из таблицы атрибутов, по которому будем классифицировать — pop_max (в слое городов уже прописана оценка населения города, источник данных там хитрый, но для первого приближения подойдёт):

ГИС автоматически классифицирует объекты на заданное количество классов по выбранному методу, но в данном случае я предпочитаю не доверять автоматике, а просто явно задать границы каждого диапазона (население города, для которого будет использоваться тот или иной знак). Щелкая два раза по диапазону в таблице, попадаем в диалоговое окно, где можно этот диапазон менять:

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

Теперь, собственно, надо для каждой категории задать значки. В диалоговое окно настройки значка попадаешь при двойном нажатии на знак рядом с диапазоном:

Для первых двух категорий я просто выбираю белый цвет знака и разные размеры (1мм для «до 15 000» и 2мм для «15 000 – 30 000»). Для следующих трёх значков настройка немного сложнее. В них надо нажать кнопку «Изменить...» с гаечным ключом, чтобы попасть в настройки следующего уровня:

Каждый из трёх оставшихся значков я набираю из двух наложенных друг на друга знаков, собранных в один. Добавление слоя знака осуществляется нажатием на кнопку: . Для каждого слоя знака естественным образом настраивается цвет и размер. (Возможно, размер придётся потом корректировать: при выводе на печать QGIS не всегда адекватно отображает объекты, размеры которых выражены долями миллиметров, и чтобы элементы значка не «съезжали» друг относительно друга может потребоваться добавить или убавить в размере значка долю миллиметра). Настройки значка для «30 000 – 60 000» выглядят так:

После настройки всех значков карта выглядит так:

Условное оформление надписей

После того, как значки городов стали меняться в зависимости от людности, появляется желание сделать и подписи названий также меняющимися в зависимости от размера. Это можно сделать, создав в таблице атрибутов новый столбец, в котором будем прописывать размер шрифта. Открываем таблицу атрибутов, включаем режим редактирования и нажимаем на кнопку добавления нового столбца:
. В открывшемся диалоговом окне

вписываем название столбца (FONT_SIZE) и его размер (видимо в байтах? в любом случае 5 должно хватить с запасом). Теперь в конце таблицы есть пустой столбец с названием FONT_SIZE. Значения в таблице можно отсортировать по полю pop_max по возрастанию, нажав на его заголовок. В итоге таблица будет выглядеть так:

Теперь несложно заполнить поле FONT_SIZE подходящими размерами шрифта. (В принципе, можно было бы воспользоваться ранжированием населённых пунктов уже присутствующем в таблице или данными о населении для того, чтобы вычислять размер шрифта автоматически, но при небольшом объеме данных проще прописать размер шрифта для каждого города «вручную».)

Я задал размер 8 для городов с населением менее 15 000, 9 для 15 000–60 000, 10 для 60 000–400 000 и 11 для свыше 400 000. Собственно, для того, чтобы эти размеры попали на карту, надо снова открыть диалог для настройки подписей слоя и выбрать в нём третью влкадку, «Параметры данных из слоя»:

Напротив графы «Размер» выбираем из списка поле FONT_SIZE. Заодно можно в поле «Подчёркивание» выбрать поле amd0cap — там стоит 1 у столицы и 0 у всех остальных городов, благодаря чему Веллингтон будет подчёркнут. После этих настроек карта выглядит так:

В районе Окленда наблюдается «мясо», но разбираться с ним пока что преждевременно.

Гипсометрия
Гипсометрия также скачивается с сайта NaturalEarthData, но это уже растровые, а не векторные данные. Есть несколько вариантов цветового оформления, из которых можно выбрать, какой предпочесть — дело вкуса. Скаченную гипсометрию надо добавить уже как растровый слой, нажав кнопку: .
Гипсометрия, как и векторные данные, покрывают весь мир, но таскать с собой все эти данные совсем необязательно, особенно с учётом того, что они очень много весят.

Собственно, нам достаточно той части, которая попадает на землю НЗ. Обрезка растровых данных осущствляется иначе. В меню «Растр» наверху выбираем пункт «Извлечение», а в нём — «Обрезка». После этого откроется диалоговое окно:

В нём надо указать файл, в который записать результат операции, поставить галочку на «Добавить слой на карту», а главное — указать, как делать обрезку. При открытом окне можно «нарисовать» на карте прямоугольник, и его координаты впишутся в поля для координат.

После всех этих настроек можно нажимать «ОК». Получившаяся гипсометрия добавится новым слоем на карту, слой с «мировой» гипсометрией можно спокойно удалять.

Я располагаю слой с гипсометрией между NZ_admin0 и NZ_coast. После этого становится видно, что гипсометрия слегка «торчит» за границы береговой линии, что не очень красиво:

Это решается ещё одним «обрезанием» гипсометрии через тот же диалог, только на этот раз уже в качестве границ обрезки надо указать «Слой маски» и выбрать NZ_admin0. Результаты окажутся весьма политкорректными:

Остаётся сделать чёрный цвет на гипсометрии прозрачным. Кроме того, все остальные цвета можно сделать полупрозрачными — в сочетании с зелёными полигонами в NZ_admin0 это будет хорошо смотреться. В свойствах гипсометрического слоя заходим во вкладку «Прозрачность»:

Здесь добавляем в список прозрачных пикселей чёрный цвет с помощью кнопки , позволяющей выбирать цвета прямо на экране. Кроме того, общую прозрачность ставим на 30%.

Система координат

До сих пор мы не говорили ничего про проекцию карты. Собственно, все данные, которыми мы пользовались хранились в виде файлов в системе коордиинат WGS84 — там координаты точки это широта и долгота. В QGIS такие системы координат называются «географические». Поскольку НЗ расположена не слишком далеко от экватора, использование такой системы координат вносит не слишком большие погрешности, но всё-таки вносит. Но для того, чтобы получить «нормальную» карту, надо перейти к отображению в системе координат, в которой единицами измерения будут уже не градусы, а метры. Без этого, в частности, не получится сделать нормальную масштабную линейку. Ну и, кроме того, в правильно подобранной системе координат НЗ будет выглядеть менее искажённо.

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

Для смены системы координат отображения надо нажать на маленькую серую кнопку в правом нижнем углу экрана: . Откроется диалоговое окно, в котором надо обязательно поставить галочку «Включить преобразование координат "на лету"»:

Для стран обычно есть специально выбранные системы координат, у которых название страны (или региона) фигурирует в названии. Вводя в фильтр New Zealand, мы находим систему координат NZGD2000 / New Zealand Transverse Mercator 2000. Выбираем её и нажимаем «ОК». После пересчёта карта примет вид:

Растровую гипсометрию лучше перепроецировать отдельно, создав новый растровый слой уже в нужной системе координат. Для этого надо в меню «Растр» выбрать пункт «Проекции» — «Перепроецирование». Откроется диалоговое окно:

в котором надо выбрать целевой файл, указать целевую систему координат (в нашем случае — NZGD2000), а также поставить галочку «Добавить результат на карту». Получившуюся новую «чёрную» гипсометрию надо настроить так же, как предыдущую по части прозрачности, а предыдущую — удалить.

В итоге карта будет иметь вид:

Океан, параллели, меридианы

Для того, чтобы фон карты был не белым, а голубым можно, в принципе поставить голубой в качестве цвета фона в проекте. Лично мне это решение не очень нравится, в частности потому, что оно плохо подходит для карт мира. Вместо этого я использую слой, в котором вся планета покрыта четырёхугольниками со «стороной» в 30°. Я скачал этот слой не помню где, и не помню, когда, поэтому просто выкладываю здесь архив с ним. Добавляем этот слой под все остальные и делаем в нём многоугольники с заполнением и границей одного синего цвета. Результат:

Параллели и меридианы (и даже тропики, если надо) также составляют часть пакета данных с NaturalEarthData. Правда, у меня с ними что-то не сложилось в НЗ-системе координат, и для неё я использовал слой с координатными линиями тоже взятый-не-помню-где: можно скачать архив с ними. Вместе с океаном и сеткой карта выглядит вот так:

Оформление карты

Теперь, когда карта выглядит прилично, можно перейти к её оформлению. Чтобы потом не «прыгать» туда-сюда, можно уже сейчас переименовать те слои (правой кнопкой по слою — «Переименовать»), которые должны попасть в условные обозначения карты, так, как они там должны называться. Слой с городами я назвал «Города с населением:», а слой дорог — «Автомобильные дороги».

Теперь перейдём к переносу нашей карты на условную «бумагу». Для этого в меню «Файл» выбираем пункт «Создать макет». Откроется окно для работы с макетом карты:

Прежде всего во вкладке «Макет» сбоку выставляем размер бумаги А5, ориентацию Портрет и качество 90dpi. Теперь на «листе» бумаги надо разместить элементы карты и оформления. Собственно, сама карта (а также потом, если необходимо, врезки) добавляется кнопкой , после нажатия которой надо нарисовать на листе прямоугольник будущей карты. Во вкладке «Свойства элемента» можно видеть ширину и высоту элемента «Карта» в миллиметрах:

Там же, но ниже, можно выставить масштаб карты. Даже при том, что «попасть» при печати в настоящие сантиметры сложно, имеет смысл выбирать «круглый» масшатаб. Для НЗ я выбрал 1:7500000, соответственно, в поле масштаб вписал 7500000:

Затем, с помощью кнопки перемещаем содержимое карты внутри окна так, чтобы НЗ влезла целиком (главное, потом не забыть переключиться на обычную «стрелку»). Результат:

Для наложения надписей поверх карты используется кнопка . У каждого текстового элемента во вкладке «Свойства элемента» справа можно выставить цвет, шрифт, размер, а также установить (в разделе «Общие параметры») наличие и ширину рамки, цвет и прозрачность фона. Элементы (в том числе подписи), можно автоматически выравнивать относительно друг друга, выбирая сразу несколько элементов (например, с Shift или Ctrl), а затем используя кнопки . После добавления заголовка, подзаголовка и подписей координатной сетки, карта выглядит вот так:

Теперь добавим масштабную линейку. Это делается кнопкой: . В свойствах элемента, который появится после щёлканья в карту, есть несколько важных параметров.

1. «Размеры сегмента (единицы карты)». С тех пор, как мы сменили систему координат отображения, единицами карты у нас стали метры. Соответственно, если мы хотим, чтобы 1 сегмент масштабной линейки соответствовал 75 км, нам надо в этом поле прописать 75000 (потому что именно столько метров в 75 км).
2. «Единиц карты в делении». Это влияет на то, как отображаются подписи над линейкой. Фактически, это единица измерения для этих подписей в метрах. Поскольку мы хотим подписывать в километрах, там надо указать 1000 (потому что в каждом км 1000 метров).
3. Количество сегментов в линейке справа и слева — достаточно очевидные параметры.
4. Внизу есть не очень заметная графа «Обозначение единиц», куда можно вписать «км».
5. «Стиль». Здесь всё сложно. Классической «советской» масштабной линейки среди возможных стилей, к сожалению, нет. ближе всего к ней подходит «Одинарная рамка» и «Штрих вверх». Вероятно, если их очень аккуратно скомбинировать (или нарисовать поверх одной из них недостающие элементы просто как линии/прямоугольники), можно получить правильную «советскую» масштабную линейку. Но пока я себе такой задачи не ставил, решил обойтись обычной линейкой со стилем «Штрих вверх».

Результат и все настройки масштабной линейки на рисунке ниже:

Полученный результат достоен того, чтобы его сохранить, и затем использовать в качестве шаблона оформления для остальных карт Новой Зеландии (нажимаем на кнопочку сохранения наверху).

Остаётся добавить легенду карты. Для этого используется кнопка . В добавленную легенду попадут ВСЕ слои, которые есть на карте:

Большинство из них нам не нужно вовсе, как и, например, заголовок «Легенда». Заголовок убирается в разделе «Общие» в свойствах легенды, там же настраиваются шрифты. Содержимое легенды и порядок элементов настраивается в разделе «Элементы легенды». Там же имеет смысл снять галочку «Автообновление», чтобы потом легенда не «портилась» сама, если что-то начать менять в карте.

Все лишние элементы из легенды удаляем кнопкой . Рядом с ней расположены кнопки, позволяющие менять порядок элементов в легенде и редактировать подписи. В частности, можно убрать подпись «Автомобильные дороги» у группы, и сделать её подписью у конкретного знака.

Так же, как и у текстовых элементов, у легенды в разделе «Общие параметры» выставляются свойства рамки и фона. После всех настроек легенды карта выглядит так:

Теперь из макета можно сделать картинку и посмотреть, всё ли на ней хорошо отобразилось. Нажимаем на кнопку и сохраняем картинку в файл. Результат приведён ниже:

Из заметных неприятностей — то, что в легенде кружочек у городов в 60 000–400 000 «сполз» с центра (как и было обещано). Экспериментально подобранные радиусы 3мм для внешнего кружочка и 1,9мм для внутреннего позволяют решить эту проблему. Впрочем, вероятно, она же решается и увеличением значения dpi.
«Мясо» вокруг Окленда исправилось само собой за счёт изменения системы координат и выбора масштаба. Там только кружочек Такапуны не виден под Оклендом, но это можно настроить через уровни знаков (чтобы мелкие рисовались поверх крупных) или же «подвинув» слегка Такапуна (читерский способ). Ещё надпись Гисборн упирается в границу карты — можно чуть сместить карту в рамке в сторону.
Итоговая карта (с исправленным значком в легенде и подвинутая так, чтобы влез Гисборн, но без исправления Такапуны):

14 комментариев к “Quantum GIS: как это сделать?”

  • Shape-файлы для Ближнего зарубежья (OpenStreetMap)
    http://gis-lab.info/projects/osm_shp/region

    Данные OpenStreetMap на весь мир:
    http://download.geofabrik.de/osm/
    http://downloads.cloudmade.com/

  • A:

    Спасибо большое про статьи о работе в QGIS! много нового и интересного!

  • Борис:

    Алексей, добрый день.

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

    • Борис:

      уточню. речь идет об одном файле, в котором выборка сделана по различным параметрам.

      • Алексей Яшунский:

        Прошу прощения, что так долго не отвечал. Насколько я помню, в QGis, начиная с какой-то версии, в меню правой кнопки списка слоёв есть пункт-галочка, который влияет на то, учитывается ли порядок слоёв при отрисовке. Если эта галочка не стоит, то перемещение слоя вверх или вниз на порядок отрисовки не влияет.

  • ЛЕВ:

    в ВЕРСИИ 2.6 НЕ МОГУ ОТКРЫТЬ СЛОИ СОЗДАННЫЕ В ПРЕДЫДУЩИХ ВЕРСИЯХ. ЧТО ПОСОВЕТУЕТЕ?

    • Алексей Яшунский:

      Даже не знаю, что посоветовать, но сам вопрос звучит немного странно. Речь идёт именно о слоях или о проектах?

  • HARD:

    Огромное спасибо за ваши руководства!

  • Аноним:

    Подскажите, пожалуйста) вначале вы выложили пример готовой карты с плотностью населения. Не могу найти подложку с плотностью в источнике, ссылку на который вы указали.

    • Алексей Яшунский:

      Такой подложки в этом источнике действительно нет. О том, как сделать карту с плотностями написано вот в этом посте.

  • Илья:

    Интересная статья, есть вопрос! Пишу дипломную работу по теме: "Разработка геоинформационной системы управления и координации деятельности мобильных ремонтных бригад."
    На карту города нужно добавить автомобили, есть ли в Qgis такая возможность? Например сделать слои, которые меняют свои координаты по времени? Спасибо.

    • Алексей Яшунский:

      Думаю, что с такой задачей имеет смысл обратить внимание на слои, которые загружаются из баз данных (PostGIS, и пр.) — это выглядит более естественным для обновляемых данных, чем хранение в файлах. При этом, правда, надо будет как-то сделать автоматическое обновление картинки. Насколько я смог понять, это можно сделать через скрипты на питоне (см. здесь http://lists.osgeo.org/pipermail/qgis-user/2010-May/008714.html , например).

  • Алла:

    Доброе время суток.
    Подскажите пожалуйста, а если надо отметить уже на выделенной территории, я добавляю другие векторные сои (здания) и их много и на этой территории, которая выделена и за её приделами, как выделять эти объекты? Каждый объект выделять очень сложно и долго. Может есть другой вариант, как обвести нужные объекты? Заранее спасибо.

Оставить комментарий

Тема WordPress и иконки разработаны N.Design Studio
© 2024 Страница Алексея Яшунского RSS записей RSS комментариев Войти