Quantum GIS: полезные мелочи

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

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

Но про мелочи тоже стоит написать.

Организация макетов

Прежде, чем двигаться дальше, имеет смысл сделать ещё одну «уборку», до которой раньше руки не доходили. Сейчас в сохранённом проекте у меня есть макеты четырёх карт, которые достаточно неинформативно называются «Макет 1»–«Макет 4». Чтобы не путаться в них, имеет смысл их назвать, согласно содержанию. Для этого надо в меню «Файл» выбрать «Управление макетами». Откроется окно:

Пользуясь кнопкой «Переименовать», можно назвать макеты как-то по-понятнее. Я назвал «Обзорная», «АТД», «Плотность» и «Занятость».

«Домашние заготовки»

На самом деле, слои лежащие в основе карты электростанций, у нас уже готовы:

Достаточно включить слои NZ_lakes, NZ_rivers, NZ_coast, NZ_hypso3, NZ_admin0 из группы «Обзорная карта» и слой NZ_cities из «Адм.деление».

Импорт KML

Теперь, собственно, к электростанциям. Информацию о них я взял на страничке Википедии. Там же лежит ссылка на KML-файл с координатами всех электростанций. Пройдя по ней, мы попадаем на Гугл-карты, на которых отображены все электростанции. При этом в строке поиска будет введена ссылка, ведущая уже непосредственно к файлу с координатами. Если по ней пройти, то скачается файл с каким-то невнятным названием (скорее всего, kmlexport). Его я перенесу в удобную мне папку и назову NZ_power.kml.

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

KML-файлы можно грузить в QGIS как обычные векторые слои через кнопку «Добавить слой». Только в качестве типа файла надо указать «Keyhole Markup Language [KML]»:

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

Просмотр якобы-KML-файла блокнотом показывает, что это вовсе никакой не KML. Он начиается с букв PK, что говорит о том, что на самом деле это — Zip-архив (внутри которого KML). Переименовав NZ_power.kml в NZ_power.zip, я получаю возможность его распаковать и из него образуется файл 1aecac872e3a10f94fcf9be08faab47e.kml . Название у него странное, но зато его уже можно спокойно загрузить в QGIS. Внутри KML, как выясняется, электростанции разделены на слои по типам:

Удерживая клавишу Shift, выбираю все четыре слоя:

Электростанции успешно добавляются четырьмя отдельными слоями на карту (и даже цвета более-менее удачные):

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

Прежде, чем что-то делать, стоит сохранить все слои, получившиеся из KML в нормальные SHP-файлы, потому что нам придётся их редактировать, а это всегда лучше делать именно с SHP. После пересохранения (через пункт «Сохранить как...») и добавления SHP-слоев взамен KML, почти ничего не изменилось:

Дальнейший ход действий, возможно, допускает оптимизацию, но я рассказываю то, как действовал я. Мне показалось, что гораздо удобнее иметь все электростанции в одном слое. Бесполезное поле Description в атрибутивной таблице я заполнил типом электростанции: с помощью калькулятора в каждом слое прописал свою строку — wind, fossil, hydro и geothermal.

Значение в поле «Выражение» надо брать в апострофы (одинарные кавычки), потому что это — текст (а не название функции или поля таблицы).

Теперь можно четыре файла объединить в один. Для этого в меню «Вектор» выбираем «Управление данными»—«Объединение shape-файлов». Откроется диалоговое окно:

Ставим галочку на «Выбрать индивидуальные слои», выбираем наши четыре слоя с элеткростанциями разных типов, для нового слоя я выбрал имя NZ_power и поставил галочку «Добавить на карту».

После выполения действий окно не закроется само (его надо закрыть кнопкой), но в списке слоев появится NZ_power. Остальные слои теперь можно удалить. Внутри этого слоя — все наши электростанции вместе.

В атрибутивной таблице видно, что в поле Descriptio теперь прописан тип электростанции:

Можно для отображения этого слоя даже настроить стиль «Уникальные значения» по полю Descriptio, чтобы разные типы электростанций раскрашивались разным цветом.

Но наша цель сейчас — добавить информацию о мощности.

Присоединение данных

Информация о мощности есть в XLS-файле, который мы скачали по ссылке с Википедии. Информации там много, и даже слишком (перечислено больше электростанций, чем есть у нас в слое). Кроме того сами электростанции не всегда названы точно так, как у нас в слое. В общем, работа по сопоставлению будет нетривиальной, и делать её всё-таки удобнее в электронных таблицах. Чтобы работать с атрибутивной таблицей нашего слоя в электронных таблицах, её лучше экспортировать в CSV-файл (хотя некоторые программы умеют работать напрямую с DBF-файлом, в котором как раз и хранится атрибутивная таблица). В меню по правой кнопке на слое выбираем «Сохранить как...», и в открывшемся окне в поле формат — CSV. Этот файл можно загрузить в электронные таблицы (либо просто открыть как CSV-файл, либо — в поздних версиях Экселя — используя функции импорта данных из текста): пространственная информация туда не попадёт, но атрибутивная таблица сохранится в точности.

На время работы стоит сохранить эти данные в формат электронной таблицы (вместо переходного формата CSV). Кроме данных из QGIS нам понадобятся данные из файла с мощностями: их можно скопировать на второй лист того же документа:

Реально из всех этих данных нам нужны только название станции и её мощность, поэтому остальные столбцы можно удалить:

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

Сравнивая названия в двух списках, можно заметить, что в списке из ГИС каждое название заканчивается словосочетанием, описывающем тип станции, и таких словосочетаний нет нигде во втором списке. Поэтому формирование третьего столбца на первом листе можно начать, скопировав первый столбец, а затем заменив в нём (но только в нём) словосочетания « hydroelectric power station», « geothermal power station», « wind farm» на пустые строки и отредактировав первые станции в списке так, чтобы третьем столбце осталось только их название:

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

=VLOOKUP(C2;Лист2.A$2:A$216;1;0)

(по-русски эта функция называется ВПР). Она ищет значение из ячейки C2 в списке Лист2.A$2:A$216. Третий параметр 1 означает, что в качестве результата мы выдаем первый столбец из списка, в котором идёт поиск (но у нас там всего один столбец), а четвёртый параметр 0 означает, что нас интересует при поиске только точное совпадение. В результате многие станции найдутся:

На месте ненайденных в списке станций будет стоять #Н/Д. Можно отсортировать все станции по четвёртому столбцу, чтобы оценить, сколько же станций найти не удалось:

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

Теперь формулу в четвертом столбце можно подкорректировать, чтобы она выдавала уже не название, а мощность:

=VLOOKUP(C2;Лист2.A$2:B$216;2;0)

Теперь мы ищем значение C2 в первом столбце двухстолбцового диапазона Лист2.A$2:B$216, а выдаём значение из второго столбца (потому что третий параметр функции — 2). В итоге напротив каждой электростанции написана её мощность в МВт.


Ценность для нас представляют только первый и четвёртый столбцы. Поэтому имеет смысл скопировать данные в новый файл, вставив их только как значения (без формул), выкинуть второй и третий столбцы, а в четвёртом заменить десятичную запятую на десятичную точку, предварительно поставив столбцу тип "Текст":

Эти данные можно сохранять в CSV-файл. Соответствующий csvt-файл должен содержать "String","Real" (потому что первое поле — строка, а второе — десятичное действительное число).

Если всё правильно сделано, то при загрузке полученного CSV в ГИС, его таблица будет выглядеть так:

Теперь его можно связать со слоем электростанций по совпадению полей Name. Получившийся в результате соединения слой я сохраняю под именем NZ_power2 и дальше уже работаю с ним. В его атрибутивной таблице есть и тип станций, и мощность:

Теперь можно переходить к оформлению.

Многослойные значки

На самом деле, многослойные значки мы уже делали, когда рисовали города на обзорной карте. Слой NZ_power2 будем оформлять как «Уникальные значения» по полю Descriptio.

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

Молния нашлась в шрифте Dingbats. Если у вас его нет, можно поискать, наверное, какие-то замены.

После оформления всех значков «молниями» на фоне кружков разного цвета, карта выглядит так:

Масштабирование по полю

Теперь хотелось бы сделать так, чтобы размер кружочков менялся в зависимости от мощности электростанций. На этой карте мы будет использовать ступенчатую шкалу. Первая градация — 100–400 МВт, вторая — 400–850 МВт и третья — 850–1000 МВт. Это довольно неплохо соответствует кружкам с диаметрами 1, 2 и 3.

С помощью калькулятора создадим в атрибутивной таблице слоя NZ_power2 новое (целочисленное) поле SCALE и заполним его единицами.

Теперь, если нажать на заголовок поля POWER, электростанции в таблице отсортируются по мощности (по возрастанию/убыванию переключается ещё одним кликом по заголовку).

Теперь в таблице легко найти, где заканчивается первая градация, и начинается вторая. Выберем те электростанции, которые попадают во вторую градацию:

При открытии калькулятора будет стоять галочка «Обновить только выделенные объекты». Ставим ещё и галочку «Обновить существующее поле», и в поле SCALE вписываем 2 (это можно было бы сделать и «вручную» прямо в таблице без всякого калькулятора, но такое действие менее реально, если объектов существенно боьше трёх). Аналогично для электростанций из третей градации пишем в поле SCALE значение 3.

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

Выбирая здесь поле SCALE, получаем почти желаемый эффект:

Пожалуй, неприятностей осталось всего две. Во-первых, на карту попало некоторое количество электростанции мощностью менее 100 МВт, но это легко исправить через «Запрос...» (POWER >= 100) к слою. Во-вторых, в районе Гамильтона кружки больших электростанций накладываются один на другой, и, возможно, их стоит слегка раздвинуть: это легко сделать, включив слой для редактирования и используя инструмент для перемещения точек.

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

Для полного счастья остаётся только добавить пустой слой, в котором сделать легенду для мощности электростанций.

Теперь можно всё это собрать на макете. После сохранения в картику становится понятно, что всё-таки название Гамильтона не читается.

Проблема более-менее решилась добавлением буфферизации вокруг подписей городов (белый цвет, толщина 0.5мм). А вот с «молниями», которые после масштабирования торчат за пределы кружков, к сожалению, сделать ничего не удалось. Неприятно ещё и то, что в окне просмотра карты и при приближении макета, эти масштабированные значки отображаются правильно. Проблемы возникают только при сохранении в картинку или PDF. Надеюсь, что в следующей версии что-нибудь уже исправлено, чтобы таких проблем не было (надо проверить, что ли...). А пока результат такой:

2 комментария к “Quantum GIS: полезные мелочи”

  • HARD:

    Здравствуйте еще раз.
    Разбираюсь с QGIS по вашим трудам.
    Хотел воспроизвести этот урок, но не могу найти файл KML с электростанциями.
    С ВИКИ почему - то не скачивается.
    Вас не затруднит выслать его на почту?

    Заранее, спасибо.

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

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