Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Yuriy Al. Shirokov ([info]yushi)
@ 2011-10-21 16:46:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:foss, linux, ГИС, карты, походы

Quantum GIS в руках дилетанта
Одна из немногих вещей, до недавнего времени заставлявших меня запускать виртуалку с Windows — программа OziExplorer. Эта страшноватая на вид софтина, если кто не в курсе — стандарт de facto для работы с привязанными растровыми картами на территории бывшего СССР. Использовал я её довольно тупо: либо брал чужие GPS-треки, загружал в OziExplorer, накладывал на привязанную карту и смотрел, где они оказались, а при необходимости — печатал результат, либо брал собственный GPS-трек и, опять же, накладывал его на карту.

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

С тех пор я время от времени возвращался к попыткам научиться делать хоть что-то в Quantum GIS, но без особого энтузиазма — так, вяло попинывал лежавшую на диске россыпь привязанных карт, пытаясь накладывать на них GPS-треки или ещё что-нибудь. Естественно, без особого успеха. Так бы, наверное, продолжалось и до сих пор, если бы меня не занесло на IRC-канал всё того же GIS-Lab.

IRC-канал оказался нетипичным. Во-первых, на нём обнаружились не только боты, но и живые люди. Во-вторых, эти люди отвечали на мои вопросы. В-третьих, их ответы мне помогли.

Как выяснилось позже, на гислабовском же форуме можно было отыскать ответы на большинство моих вопросов, но для этого надо было гораздо лучше представлять себе, что искать. Так как часть действий, которые мне посоветовали, оказались не слишком тривиальными, распишу-ка я их пошагово — во-первых, для себя, чтобы не забыть, а во-вторых, на случай, если решить ту же задачу понадобится ещё какому-нибудь дилетанту, очень поверхностно знакомого и с географией, и тем более с ГИС-ами. То есть человеку, примерно представляющему, что такое системы координат, проекции, центральный меридиан зоны и т.д., но не помнящему датумы наизусть и тем более не разбирающемуся в тонкостях устройства форматов хранения геоинформации.

Задача была такая: есть листы обычной советской километровки. Часть — в виде троек файлов с расширениями .jgw, .jpg и .prj (кто бы мне подсказал, что это за формат? UPD: говорят, ArcGIS), часть — в виде пар файлов .jpg и .map (именно с этим форматом работает OziExplorer). Есть файл в формате GPX с набором ключевых точек маршрута. Надо наложить точки на карту, а затем экспортировать результат в форматах, пригодных для размещения в Интернете и печати.

Дополнительная тонкость, как я понял, была в том, что исходные карты были кривоваты — в частности, не содержали информации об используемой системе координат и проекции в явном виде.

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

Начнём с файлов JGW/JPG/PRJ.



Эта тройка файлов в моём случае не содержала явного указания проекции в понятном Quantum GIS виде. Чтобы исправить это, необходим плагин "GdalTools". Ставят его так. Идём в пункт меню "Модули -> Управление модулями..." и в открывшемся окне ставим галочку напротив модуля "GdalTools", если она ещё не стоит. После этого в меню "Растр", в котором до этого был единственный пункт "Калькулятор растров...", появится длинный список разных функций.



В этом списке я выбрал пункт "Назначить проекцию". В появившемся окне в поле "Исходный файл" указал jpg с картой, затем нажал кнопку "Обзор" рядом с полем "Целевая система координат". В появившемся диалоге в параметрах поиска указал: "Источник" — "EPSG", "Искать" — "ID", в поле рядом с кнопкой "Найти" вбил "2504". Выбрал найденную проекцию (Пулково-1942, проекция Гаусса-Крюгера, центральный меридиан — 81° восточной долготы), нажав на "Ok".



Дальше выяснилось, что команда gdalwarp из этого диалога вообще не вызывается. Ну, баг, да. Я скопировал команду из диалогового окна в эмулятор терминала и выполнил её в том каталоге, где лежат наши файлы. После этого в каталоге появился файл с расширением .tif.tmp.

Нажал на кнопку "Закрыть" в диалоге "Назначить проекцию".

После этого кликнул по кнопке "Добавить растр", выбрал получившийся TIFF-файл, и он появился на экране.



После этого надо выбрать систему координат проекта в целом. Если вам всё равно, а перепроецировать растр вы не хотите (об этом — ниже), разумно сделать её такой же, как у импортированного растра. В моём случае мне было всё равно, и я именно так и сделал. Выбрал пункт меню "Установки -> Свойства проекта...", в появившемся окошке в списке "Недавно использованные системы координат" ткнул в "Pulkovo 1942 / Gauss-Kruger CM 81E", поставил галочку "Включить преобразование координат «на лету»", нажал на "OK".



Теперь нужно было наложить GPS-трек. Это совсем просто, но работа с GPS тоже вынесена в отдельный плагин. Чтобы его включить, надо снова выбрать пункт меню "Модули -> Управление модулями..." и поставить галочку напротив плагина "Инструменты GPS". После этого надо пройти в появившийся пункт меню "Модули -> GPS -> Инструменты GPS" и в окне "Инструменты GPS" на вкладке "GPX-файлы" указать файл с треком в формате GPX (если он у вас в другом формате, воспользуйтесь замечательной утилитой GPSBabel, впрочем, с поддерживаемыми этой утилитой устройствами Quantum GIS умеет общаться напрямую).




Я указал файл, нажал "OK", и трек появился на карте. Правда, выбранный по умолчанию для маршрутных точек фиолетовый цвет был на ней не слишком заметен, к тому же, на карте не было подписей.



Чтобы исправить это, я открыл контекстное меню слоя с маршрутными точками правым кликом по его названию в списке слоёв и выбрал в контекстном меню пункт "Свойства".





В открывшемся окне я нажал на кнопку с цветным прямоугольником и надписью "Изменить" и в появившейся палитре выбрал светло-жёлтый цвет. Затем перешёл на вкладку "Подписи", поставил галочку "Включить подписи" и во вкладке "Параметры подписей" выбрал: "Поле, содержащее подпись" — "name", "Размер" — "7", "В пунктах", "Шрифт" (диалог открывается при нажатии на кнопку) — "Жирный", "Цвет" (палитра появляется при нажатии на кнопку) — синий, #0000FF, "Размещение" — "Внизу", "Смещение по Y" — "-2", "В пунктах". Вид надписей стал примерно таким:



На этом работа с первой картой была закончена.

С файлами OziExplorer всё тоже оказалось не так просто. Открывать .jpg Quantum GIS не захотел. Пришлось пересохранить .jpeg как .gif, и поправить .map-файл, прописав там имя пересохранённой картинки (у меня это третья строчка сверху). После этого выполнить в командной строке команду
gdalwarp -r near имя_карты.gif имя_карты.tif

И уже полученный TIFF я попытался открыть как слой Quantum GIS, нажав на кнопку "Добавить растровый слой" в панели инструментов.

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



Чтобы побороть этот эффект, пришлось перепроецировать карту. Для этого нужно открыть пункт меню "Растр -> Перепроецирование" (я предполагаю, что модуль "GdalTools" подключён; если что — как это сделать, я рассказывал выше). В появившемся окне я снял галочку "Исходная система координат", выбрал ту проекцию, которую уже использовал для предыдущего файла — Гаусса-Крюгера с 81° восточной долготы как центральным меридианом — и нажал на "OK". Через некоторое время появилось диалоговое окно, сообщающее, что перепроецирование завершено, и второе диалоговое окно с логом утилиты gdalwarp. Окно перепроецирования можно было закрывать.

В общем-то, можно было сразу ввести в командной строке команду
gdalwarp -t_srs EPSG:2504 -of GTiff имя_входного_файла имя_выходного_файла
и добавить в проект полученный файл.



Дальше, чтобы увидеть треки поверх карты, нужно включить галочку "Преобразование координат на лету" в свойствах проекта ("Установки -> Свойства проекта..."), а систему координат проекта выставить такой же, как у карты. Карта при этом может пропасть из виду. Это нормально. Чтобы она снова появилась на экране, надо выбрать пункт меню "Вид -> Полный охват" или нажать кнопку "Полный охват" на панели инструментов.

Дальше я действовал точно так же, как и в предыдущий раз. Выбрал пункт меню "Модули -> GPS -> Инструменты GPS", указал .gpx-файл на вкладке "GPX-файлы", настроил отображение появившихся точек.

Осталось подготовить карты к печати или размещению на веб-странице. В Quantum GIS вообще-то есть встроенный механизм печати, так называемые "компоновки", но он довольно крив, так что лучше воспользоваться плагином EasyPrint. У меня он не был установлен по умолчанию, так что его пришлось загрузить.



Для загрузки плагина надо открыть пункт меню "Модули -> Загрузить модули..."; откроется окно инструмента для работы с хранилищами плагинов. По умолчанию плагинов довольно мало, и того же EasyPrint среди них нет. Надо добавить сторонние хранилища. Для этого на вкладке "Репозитории" нужно нажать кнопку "Добавить репозитории" и согласиться с традиционным предупреждением об отсутствии ответственности за поведение кода, написанного третьей стороной. Quantum GIS полезет в сеть, скачает списки плагинов и добавит их на вкладку "Модули". Я нашёл плагин "EasyPrint", набив начало его названия в поле "Фильтр", выбрал его в списке плагинов и нажал на кнопку "Установить модуль". После этого в меню "Модули" появился новый подпункт "EasyPrint".



Чтобы воспользоваться плагином, я открыл его диалог ("Модули -> EasyPrint -> Easy Print") и прописал следующие параметры. На вкладке "SimpleMap": "Scale" — "1:100000", для остального оставил значения по умолчанию. На вкладке "Mapbook by grid": "Grid type" — "Regular grid (w/o empty grids)", "Map layer" — имя слоя с растровой картой, "Export to" — имя папки, в которую будет выложен набор картинок в PDF. Затем нажал на кнопку "Create" в верхней части диалога, подождал, пока плагин создаст слой с сеткой, и нажал "Отмена". После этого снял галочку напротив слоя "Mapbook grid" в диалоге слоёв — может быть, и есть более изящный способ сделать номера листов невидимыми, но я его не знаю. Потом опять запустил диалог EasyPrint и нажал на кнопку "OK", а дождавшись окончания экспорта (заметного по изменению вида курсора) — на кнопку "Отмена", чтобы закрыть диалог.



После этого в папке, указанной в поле ввода "Export to" как место размещения результатов экспорта, оказалось несколько PDF-файлов с частями карты. Оформление у них довольно странное, но всё на том же GIS-Lab можно найти более прилично выглядящие варианты.

О чём ещё сказать? Ну, разве что о том, что в Quantum GIS есть удобный инструмент редактирования точек трека, позволяющий сделать, скажем, русские подписи к точкам — я не стал этим заниматься, но что работает, проверил.




Что можно сказать про Quantum GIS как про ГИС для домашнего применения?



Продукт, как я уже говорил, не слишком дружественен к начинающему пользователю. В нём есть и кривоватые места, и откровенные недоделки. С другой стороны, OziExplorer тоже довольно крив и недружественен (хотя кое-какие вещи в нём пока делать удобнее, чем в Quantum GIS). При этом у Quantum GIS есть два несомненных преимущества.

Во-первых, OziExplorer, насколько мне известно, практически не развивается — а Quantum GIS развивается довольно активно. Во-вторых, мне очень понравилось то, на каких принципах она сделана.

Если OziExplorer — это типичный для мира проприетарного софта комбайн, абсолютно закрытый и работающий по неочевидным принципам, так что в случае, если что-то идёт не так, непонятно, что с этим делать, то Quantum GIS — скорее клей, средство совмещения стандартных для мира свободного ПО решений для работы с геоинформацией (GDAL, GPSBabel, PostGIS и т.д.), вполне в духе пресловутого unix way. Поэтому, во-первых, каждый проект, на который завязана Quantum GIS, развиваясь, развивает и её, а во-вторых, при минимальном понимании, что именно необходимо сделать, всегда можно поправить не вполне правильно работающий кусок, просто скопировав используемую команду в окно терминала и отредактировав аргументы. Конечно, хочется работать без лишнего шаманства с командной строкой, но пока работа интерфейса не доведена до близкого к идеальному состояния (мне, кстати, в мире доступных домашнему пользователю ГИС такие интерфейсы вообще не попадались), эта возможность очень выручает.

Так что для своих (очень, как вы убедились, простеньких) задач я, пожалуй, попробую отказаться от OziExplorer в пользу Quantum GIS.

Ну и, как водится, хочу напомнить, что любая ГИС содержит ошибки, а GPS не отменяет необходимости пользоваться при ориентировании картой, компасом и здравым смыслом.



(Читать комментарии) - (Добавить комментарий)


[info]aspirantus
2011-10-21 18:19 (ссылка)
Спасибо очень круто

какое-то проклятие на ГИСами. каждый раз надо решить совершенно тривиальную задачу, а приходится изучать чертов комбайн

(Ответить) (Ветвь дискуссии)


[info]yushi
2011-10-22 01:18 (ссылка)
Ну, Quantum GIS тоже пока не может похвастаться тривиальностью решений во многих местах. Но меня подкупила её прозрачность — для многих операций есть просто текстовые поля, содержащие параметры вызова внешних утилит, которые делают нужную работу. Не сработало из гуя — идёшь в консоль и смотришь, что не так. А в следующий раз кое-где можешь уже и вообще без графической морды обойтись.

То есть это не комбайн, да. Не чёрный ящик с ограниченным набором команд, а понятным образом соединённый набор деталей.

(Ответить) (Уровень выше)


(Читать комментарии) -