Quantum GIS: административное деление

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

Сегодня пост про то, как раскрашивать регионы и двигать подписи. Результатом должна стать вот такая карта:

«Уборка»

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

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

Раскраска областей
Административное деление первого уровня также является частью данных NaturalEarthData, оно хранится в слое ne_10m_admin_1_states_provinces_shp, который добавляем на карту. В нём опять-таки хранится информация об административном делении по всему миру, но нам нужна только Новая Зеландия. Чтобы «вырезать» нужный фрагмент можно воспользоваться выделением прямоугольником (только надо временно вернуться к системе координат WGS84, а то при перепроецировании выделение прямоугольником перестаёт нормально работать), или же воспольоваться тем, что интересующие нас объекты (регионы НЗ) имеет в таблице атрибутов указание на то, что они относятся именно к НЗ. Откроем атрибутивную таблицу и внизу в графе «Искать» впишем «New Zealand», а в меню «в поле» выберем «admin». После нажатия на кнопку «Поиск» в таблице окажутся выбранными только регионы НЗ. Если поставить внизу галочку на «Только выделенные записи», то отображаться в таблице будут только они:

Теперь можно, как и раньше, сохранить выделенные объекты в новый слой (назвав его, например, NZ_admin1), добавить его на карту, а старый удалить:

Для того, чтобы регионы раскрасились в разные цвета, заходим во вкладку «Стиль» в свойствах слоя и выбираем в меню слева сверху «Уникальные значения» вместо «Обычный знак»:

Здесь надо указать, по какому полю надо классифицировать объекты слоя (чтобы присваивать им разные цвета) — напротив «Поле» в меню выбираем пункт «name». Затем можно дополнительно настроить «Знак». Собственно, цвет раскраски будет всё равно присвоен разный каждому из регионов, но, например, если мы хотим чтобы у регионов каким-то специальным образом был нарисован контур, это надо указать здесь: нажимаем на кнопку «изменить», затем на «Изменить...» с гаечным ключом и, например, выбираем «Стиль обводки» равный «Без обводки» и ставим толщину обводки 0:
Каким образом будут автоматически присваиваться цвета классифицируемым регионам, определяем меню «Градиент». В ассортименте имеется некоторое количество готовых градиентов, при необходимости можно настроить свой, выбрав в этом меню «Новый градиент». Начиная с версии 1.8 стал доступен «Случайный градиент», который не совсем градиент, а скорее набор цветов в определённой гамме. Он лучше всего подходит для раскрашивания регионов. Его настройка (в которую мы попадаем, выбрав «Новый градиент» и «Случайный» в открывшемся после этого окне) выглядит так:

Назвав вновь созданный градиент «Случайный2», я, фактически закончил с настройками, и теперь остаётся только нажать на кнопку «Классифицировать» внизу. Результат будет примерно такой:

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

Хитрое расположение подписей

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

Я не стал заполнять названия для далёких островов в Тихом океана, которые также администрируются НЗ, потому что они всё равно не попадают на карту. Особенно внимательные могут заметить, что в списке регионов есть Тасман, которого нет в рекламной карте в начале поста. Это произошло из-за того, что для рекламной карты я использовал другой (как выяснилось, менее аккуратный) слой с административным делением первого уровня, в котором регион на северо-западе Южного острова не был разделён на две части — Нельсон и Тасман.

Включив подписи для нашего слоя NZ_admin1, мы убеждаемся, что они выглядят не совсем так, как хотелось бы:

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

Для того, чтобы перейти к слою подписей, создадим из слоя NZ_admin1 слой центроидов (точкек, лежащих в геометрическом (?) центре регионов). Для этого в меню «Вектор» наверху выберем «Обработка геометрии» — «Центроиды полигонов». В качестве исходного слоя указываем NZ_admin1, а результаты сохраняем в файл, например, назвав его NZ_admin1_labels. Созданный слой будет предложено добавить на карту, на что надо, естественно, согласиться. Теперь можно выключить подписи у слоя NZ_admin1 и включить их у слоя NZ_admin1_labels. Естественно, поскольку нас интересуют именно надписи а не точки, в стиле отображения слоя поставить точками размер 0, чтобы они не показывались на карте вовсе, а остались только надписи.

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

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

По очереди создаём три поля.
1. Название поля — X, тип поля «Десятичное число (real)», размер 10, точность 5. В графу Выражение вписываем $x (или в разделе функции выбираем «Геоетрические» — $x). После нажатия «ОК» окно калькулятора закроется, а в дальнем правом конце атрибутивной таблицы добавится столбец с названием X, заполенненый значением долготы центроидов.
2. Снова открываем калькулятор и создаём поле с названием Y, типом «Десятичное число (real)», размер 10, точность 5, но в графе выражение уже пишем (или выбираем из списка) $y.
3. Наконец, создаём ещё одно поле с названием ANGLE, типом «Десятичное число (real)», размер 10, точность 5, для которого в графе Выражение пишем просто 0.

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

Напротив «X-координата» выбираем из списка созданное нами поле X, напротив «Y-координата» — поле Y, а напротив «Вращение» — поле ANGLE.

Если всё правильно сделано, то теперь при включении режима редактирования слоя NZ_admin1_labels, рядом с кнопкой настройки подписей активируются ещё три кнопки: . Первая предназначена для перемещения подписей, вторая для вращения, третья — для изменения содержимого подписи.

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

Использование инструмента для вращения подписей выглядит так:

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

На Южном острове подписи помещаются достаточно успешно, за исключением Нельсона, который, видимо, придётся сделать цифрой:

Ещё видно, что Вест-Кост и Веллингтон на своём фоне читаются плохо, поэтому у них стоит поменять цвет региона.

А вот на Северном острове всё плохо. Более менее нормально помещаются в свои регионы подписи Нортленда, Ваикато, Гисборна и Хоукс-Бей.

Для Бей-оф-Пленти и Мануату-Вангануй положение явно спасла бы возможность перенести часть надписи на новую строку. Для того, чтобы это можно было сделать, надо поменять способ отображения поля в атрибутивной таблице. Для этого в окне свойств слоя выбираем вкладку «Поля»:

и у поля name_local нажатием на кнопку «Строчное редактирование» меняет способ отображения на «Текстовое поле» в открывшемся окне:

Теперь в атрибутивной таблице у поля name_local могут быть многострочные значения:

После некоторого количества перемещений, вращений, и смен неудачных цветов фона на чуть менее неудачные, установки везде размера шрифта в 10 пунктов, Северный остров выглядит так:

Становится понятно, что уместить Таранаки и Веллингтон довольно сложно. В связи с этим можно им поменять размер шрифта, благо это мы уже делать умеем. В атрибутивной таблице слоя заводим поле FONT_SIZE (теперь можно через калькулятор, автоматически заполнив его значением 10). А затем прописываем в настройках подписей, что размер должен браться из этого поля. И, наконец, прописываем для Таранаки и Веллингтона размер поменьше (а заодно для Кентербери — побольше). Для того, чтобы не искать подписи в атрибутивной таблице пригодится кнопка изменения подписи, в которой теперь (когда указано, что размер хранится в FONT_SIZE), можно менять размер шрифта для конкретной надписи:

После всех шаманств имеем:

Административные центры — отображение части данных

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

Из всех городов, которые отобразились, на самом деле нам нужны только те, которые являются столицами регионов. К счастью в атрибутивной таблице есть поле, в котором у каждого города прописано, является ли он столицей чего бы то ни было. В столбце featurecla атрибутивной таблицы есть значения «Admin-0 capital», «Admin-1 capital» и «Populated place». Нас интересуют только первые два, поэтому мы сделаем выборку из данных слоя. Для этого выберем в меню по правой кнопке на слое пункт «Запрос...». Откроется диалоговое окно:

в котором можно задать условие (на языке SQL), которому должны удовлетворять отображаемые элементы. В нашем случае в «SQL-уловие WHERE» надо вписать "featurecla" = 'Admin-0 capital' OR "featurecla" = 'Admin-1 capital'. Это условие можно сконструировать нажимая на пункты в списке и соответствующие кнопочки. (При выборе поля в списке слева кнопка «Образец» под окошком справа перечисляет некоторые, а кнопка «Все» — все, значения выбранного поля.)

После применения такого запроса на карте останутся только административные центры:

Из неприятностей — у Мальборо и Тасмана не оказалось административных центров. У Тасмана он расположен рядом с Нельсоном и не очень ясно, надо ли его дорисовывать (в наборо городов с NaturalEarthData он не входит), а вот Бленхейм просто не получил правильного значения в столбце featurecla. Для того, чтобы исправить эту несправедливость, надо снова зайти в окно настройки условия через «Запрос...», нажать кнопку «Очистить» (предварительно можно скопировать условие, чтобы потом его вернуть на место), и в атрибутивной таблице прописать у Бленхейма в столбце featurecla значение Admin-1 capital. Теперь можно обратно включить условие, а также настроить отображение и подписи для слоя городов.

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

Повторное использование макета

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

Возможно, вам покажут на макете карты слой с административным делением, но это лишь иллюзия. Выберете элемент карты, справа на вкладке нажмите «Свойства элемента», а затем нажмите на кнопку «Обновить» рядом с надписью «Кэш». На макете отобразится правильная карта. Теперь надо пролистать вкладку «Свойства элемента» вниз и поставить галочку на «Заблокировать слои для этой карты»:

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

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

Легенду (если она у вас есть) с макета можно вообще удалить, выбрав её мышкой и нажав клавишу «Delete» на клавиатуре. Чтобы показалась карта, надо выбрать на макете её элемент, и справа в «Свойствах элемента» в меню вместо «Прямоугольник» выбрать «Кэш», а затем нажать на кнопку «Обновить». После этого всё станет гораздо приличнее:

Теперь можно и на этом макете поставить галочку «Заблокировать слои для этой карты». Остаётся только подкорректировать подписи и добавить сноску про цифру 1.

Итоговая карта выглядит так:

2 комментария к “Quantum GIS: административное деление”

  • Влад:

    Алексей, спасибо огромное за эти уроки по qgis!
    единственное, что я не понял, как вы добавили значение широты и долготы к меридиану и параллели в макете?
    и еще, в qgis 2.2. valmeira, которой пользуюсь я, смена координат на EPSG: 2193 не срабатывает. границы полигонов (в данном случает регионов ЗН) отображаются квадратами... а с картой с предыдущего урока - вообще бессвязными фигурами. может быть Вы знаете, с чем это может быть связано?

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

      Здравствуйте, Влад!

      Широта и долгота добавлялись просто как текст поверх карты — ничего сверхъественного. В принципе, их (подписи) можно сделать частью оформления координатной сетки, но у этого решения есть негативные стороны. Возможно, в версиях 2.* появились новые возможности, но их я ещё не исследовал.

      Вообще, конечно, по версиям 2.* надо делать обновлённые уроки, но пока я никак не соберусь — многие вещи, которые в 1.8 делались «криво», теперь можно сделать «прямо» (например, столбики в легенде).

      Насчёт системы координат — не знаю. Возможно, стоит попробовать другие системы координат.

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

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