_zif (_zif) wrote,
_zif
_zif

Category:

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.

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

Опубликовано у меня в блоге.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments