Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Очень маленькая ГИС

Оригинал: A very tiny GIS
Автор: Боб Месибов (Bob Mesibov)
Дата публикации: 5 мая 2013 г.
Перевод: А. Жбанов
Дата перевода: 10 ноября 2013 г.

quickplot - это быстрый интерактивный инструмент для двумерного рисования. Все, что ему требуется для работы - это текстовый файл со списком координат X и Y. Если эти координаты представляют собой долготу и широту, выраженные в десятичных градусах, то quickplot начинает работать как простая ГИС, обладающая при этом некоторыми удивительными возможностями.

В этой статье объясняется, как я приспособил quickplot для отображения карт Австралии. По большей части я работаю с картами с помощью qgis, и Google Maps или Google Earth, но quickplot очень удобен для быстрого создания и масштабирования простых карт. При размере исполняемого файла в 453 килобайта quickplot является самой маленькой и быстрой известной мне ГИС.

Создаем базовую карту

Я использую quickplot 0.8.15 из репозитория моего Debian Squeeze. Пользователям Debian Wheezy доступна более новая версия 0.10.3. quickplot может работать из командной строки наряду с GUI, поэтому я внес в скрипт запуска несколько основных опций:

#!/bin/bash

quickplot \
--canvas-color "#ffffff" \
--geometry=800x800+10+80 \
--grid-color "#888888" \
--no-lines \
--point-size "1" \
--grid-line-width "1" \
--same-scale \
~/Spatial/Quickplot_data/australia.txt

Здесь команда quickplot берет широту и долготу точек из файла australia.txt (чуть позже я расскажу о нем подробнее). Кроме него я выбрал еще семь опций:

  • установил белый фон карты (canvas-color);
  • сделал окно карты квадратом со стороной 800 пикселов и поместил его в желаемое место на экране (geometry);
  • выбрал светло-серый цвет для координатной сетки (grid-color);
  • запретил соединять координатные точки линиями(no-lines);
  • установил размер каждой координатной точки в 1 пиксел (point-size);
  • установил ширину линий координатной сетки в 1 пиксел (grid-line-width);
  • отобразил все в едином масштабе (same-scale).

И после этих простейших настроек я просто щелкаю пункт меню quickplot для запуска этого скрипта, и моя базовая карта мгновенно возникает на дисплее в окне quickplot (первый снимок экрана):

Разбираемся с отображением

Базовая карта Австралии на первом снимке экрана состоит примерно из 80 000 (!) точек. Координаты точек перечислены в виде простого списка в файле australia.txt, вот фрагмент этого файла:

...
146.5884    -43.5408
146.5804    -43.5371
146.5739    -43.5344
146.5577    -43.5284
146.5427    -43.5243
146.5407    -43.5241
146.5373    -43.525
146.5322    -43.5307
146.5295    -43.5307
146.5212    -43.5297
146.5194    -43.5272
146.5147    -43.524
146.5123    -43.5239
...

Я получил эти точки путем обработки свободно доступного файла с контуром австралийского побережья. После его конвертации в формат KML с помощью qgis я воспользовался средствами GNU/Linux для работы с текстом, чтобы сократить KML-файл до разделенного символами табуляции списка пар "широта-долгота".

Заметьте, что quickplot не только очень быстро отрисовывает 80 000 точек, но также отображает снабженную метками координатную сетку меридианов и параллелей. Для этого он использует диапазон значений долготы и широты из файла australia.txt.

Для того, чтобы увеличить масштаб карты, я растягиваю прямоугольник правой кнопкой мыши (второй снимок экрана), а затем отпускаю кнопку:

quickplot перерисовывает карту так, чтобы в окне находилось содержимое прямоугольника, а также пересчитывает и отображает новые метки координатной сетки (третий снимок экрана):

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

Добавляем и настраиваем слои

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

В этом диалоговом окне я открываю файл Geijera_parvifolia.txt. Это простой текстовый файл с перечислением в виде пар "широта-долгота" мест, в которых встречается красивое деревце с местным названием "wilga" (Geijera parvifolia). После того как я выбираю этот файл и щелкаю "OK", quickplot открывает новую вкладку со схемой ареала произрастания этого вида. Но мне нужно, чтобы эти точки наложились поверх моей базовой карты, поэтому я закрываю новую вкладку.

Вернувшись на вкладку с базовой картой я нажимаю "g" для того, чтобы вызвать диалог с вкладкой "Выбор полей для отображения" ('Select Fields to Plot') и здесь нам становится ясна логика quickplot (пятый снимок экрана). Первое поле ("x") в файле данных соответствует на чертеже координатной оси 0 (долготе), а второе ("y") - оси 1 (широте). Обраттите внимание на то, как эти поля соединены для файла australia.txt .

Я таким же образом устанавливаю переключатели для файла данных по ареалу нашего растения и quickplot теперь отображает все как мне требуется:

Далее я нажимаю "p" для вызова диалога черчения (седьмой снимок экрана):

Здесь я щелкаю по кнопке "Настроить чертеж" ('Configure Plot') для файла с данными по вилге, затем выбираю размер маркера равным 5 пикселам и синий цвет для этого слоя. Кроме того, я поменял цвет контура береговой линиии Австралии на черный. И вот я получаю то, чего хочу (восьмой снимок экрана):

Функциональность ГИС

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

В данном случае я вывел на экран места обитания двух видов квинслендских многоножек, ареалы которых не пересекаются. Курсор находится между ближайшими точками обитания этих видов, при этом quickplot выдает широту и долготу курсора в строке состояния в левой нижней части окна. Чтобы сохранить текущий фрагмент карты в файл формата PNG, я просто нажимаю "i" и ввожу имя для сохраняемого файла.

Для столь крошечной программы quickplot впечатляюще быстро загружает и отображает большое количество точек. Его в конце 1990-х годов создал и до сих пор поддерживает разработчик Ланс Арсенолт (Lance Arsenault). Все версии quickplot свободно доступны на условиях GNU General Public Licence.

Об авторе

Боб Месибов

Я пенсионер и живу в Австралии, в городе Пенгуин, штат Тасмания. Я люблю мастерить и предпочитаю работать с клавиатурой, а не мышью.