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

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 тоже пока не может похвастаться тривиальностью решений во многих местах. Но меня подкупила её прозрачность — для многих операций есть просто текстовые поля, содержащие параметры вызова внешних утилит, которые делают нужную работу. Не сработало из гуя — идёшь в консоль и смотришь, что не так. А в следующий раз кое-где можешь уже и вообще без графической морды обойтись.

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

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


(Анонимно)
2011-10-21 21:10 (ссылка)
Интересно было почитать отчет со стороны нового пользователя, спасибо. То что местами QGIS кривоват, согласен, мы над этим работаем. И по результатам консультации в IRC пара неудобных мест будут поправлены, я надеюсь. А еще надо наконец сделать короткую статью описание как ozi map переводить в нормальный вид, это частый вопрос. Работы много, рук мало.

Я так и не смог отправить коммент используя свой акк в жж (answer_42.lj.ru), никаким макаром он авторизовываться не захотел. Салют.

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


[info]yushi
2011-10-22 00:58 (ссылка)
Интересно было почитать отчет со стороны нового пользователя, спасибо.

Вам (в широком смысле, всему коллективу разрабов, начиная с Гэри Шермана) спасибо за мощную и идеологически красивую софтину.

Я так и не смог отправить коммент используя свой акк в жж (answer_42.lj.ru), никаким макаром он авторизовываться не захотел. Салют.

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

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


[info]alexbruy.blogspot.com
2011-10-21 21:32 (ссылка)
Неплохой обзор.
По поводу тройки файлов .jpg .jpw (.jpgw) и .prj. Это растр с привязкой ESRI ArcView (ArcGIS), в файле .prj содержится описание проекции, а в файле jpw - координаты левого верхнего угла растра и параметры поворота (если он есть). Если интересно, подробное описание можно найти на том же ГИС-Лабе и еще на куче других сайтов.

Инструмент «Назначить проекцию» должен работать, по крайней мере, когда он создавался, то работал :-). Видимо что-то сломали, в ближайшее вреся постараюсь поправить.

Компоновки не кривы (ну может самую малость :-)), тот же EasyPrint использует этот механизм. Оформление шаблонов странное для нас, а автора расширения оно скорее всего полностью устраивает.

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

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


[info]yushi
2011-10-22 01:28 (ссылка)
Компоновки не кривы (ну может самую малость :-)), тот же EasyPrint использует этот механизм.

У компоновок out of the box нет двух фич, без которых они абсолютно бесполезны в наших (горно-походных) юзкейсах: «распечатать в конкретном, заданном в понятных единицах масштабе» (например, в исходном масштабе растра) и «разделить карту на листы A4, указать листы, которые надо напечатать». EasyPrint делает и то, и другое (хотя в OziExplorer пока реализация разумнее), родной интерфейс к компоновкам — нет.

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


[info]yushi
2011-10-22 01:29 (ссылка)
Да, мануал я проглядывал (целиком не прочёл, да), но до консультаций в IRC мне совершенно не было понятно, что делать.

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


[info]mindflower
2011-10-21 22:45 (ссылка)
Насколько мне показалось, ключ к кошерной работе с qgis - наличие у пользователя геопривязанных растров. Geotifов и подобных, jpeg2000 вроде умеет такое, но я не знаю как

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


[info]yushi
2011-10-22 01:36 (ссылка)
Ну, они, как видно из поста, у меня как раз были.

На худой конец, скан советской топографической карты (я в основном с ними имею дело) привязать недолго, если знаешь номенклатуру, что куда пересчитывать, в общем, понятно. Для этого, кстати, есть готовая разграфка и пошаговая инструкция на GIS-Lab. А в Quantum GIS есть плагин для привязки растров.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]mindflower
2011-10-23 00:56 (ссылка)
Ну они не вполне те, о которых я писал. Хотя идеологически то же самое. А Вы никогда не сталкивались с нелинейными искажениями в советских картах?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi
2011-10-23 01:42 (ссылка)
А Вы никогда не сталкивались с нелинейными искажениями в советских картах?

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

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

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]mindflower
2011-10-23 02:27 (ссылка)
Фиг его знает. Я привязывал в своё время карты Ростова - фигня получилась. Друзья недавно заблудились в Карелии именно по генштабовским картам, я не вижу смысла ими пользоваться

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi
2011-10-23 02:42 (ссылка)
я не вижу смысла ими пользоваться

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

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

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


[info]alexbruy.blogspot.com
2011-10-22 13:25 (ссылка)
Не совсем так, все зависит от задачи. Например, есть класс задач, для которых наличие растра вообще не нужно, а в некоторых случах без растра никак. Скорее надо иметь общее представление о ГИС, понимать как решить задачу, какие инструменты для этого нужны.

Для привязки растров можно использовать соответствующий модуль QGIS, кроме того, зачастую данные распространяются уже привязаными (например, тот же Landsat).

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]mindflower
2011-10-23 00:51 (ссылка)
Да, подумал и полностью согласился. Дело в том, что задачи у меня специфические + очень плотно наблюдал за qgis во время его зарождения, я тогда пользовал Atlantis OpenEv и ландсатовские снимки (тогда векторные объекты в qgis рисовать было ещё нельзя). Это происходило в ущерб работе инженера it-отдела, т.е. тупо сидел и рисовал на растрах полигоны, которые потом сохранял в формате esri:). Модуль привязки тогда был, но почему-то страшно глючил. Теперь не глючит. Последний раз привязку растра по-панковски сделал в начале года в qgis, чтобы ускорить процесс прорисовки нового ростовского моста (темерницкого) на картах СитиГид.
Но в любом случае наличие правильно привязанных растров очень полезно ящитаю:)
З.Ы.
Вам большое спасибо за qgis! Если будете путешествовать в наших краях, будет вписка на двоих и посильная техническая помощь. Пишите в журнал, я обычно оперативно просматриваю почту, куда приходят уведомления о комментариях.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]alexbruy.blogspot.com
2011-10-23 15:41 (ссылка)
Может напишите кам-нибудь про свои специфические задачи? Было бы интересно почитать. А там глядишь, что-то придумаем и для их решения.
> Модуль привязки тогда был, но почему-то страшно глючил. Теперь не глючит.
Еще бы. Его в свое время существенно переработали, буквально по винтику перебрали (кстати ГИС-Лаб занимался). А про наличие растров спорить даже не собирался, они безусловно нужны и важны.

Рад, что QGIS вам нравится, будем стараться держать планку.

(Ответить) (Уровень выше) (Ветвь дискуссии)

QGIS
(Анонимно)
2011-12-06 10:54 (ссылка)
Мы сейчас активно используем в разработке ГИС-приложения API Quantum GIS. Конечно не все гладко, основная проблема - практически недокументированные функции и классы, очень трудно разбираться в них и собирать что-то работоспособное, особенно при дефиците времени. Но в целом о QGIS впечатление очень благоприятное. Мощная, открытая и в значительной мере универсальная система.

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