- PVSM.RU - https://www.pvsm.ru -
В течение нескольких лет я работал над картами, которые используются в русском и других языковых разделах Википедии. Всего мной было создано более 300 карт [1]. Я не являюсь профессиональным картографом, и не имею специального образования в этой области. Видимо, мне просто нравилось делать карты :)
В рамках этой статьи я хочу поделиться опытом создания карт для Википедии, с фокусом на позиционных картах.
Все графические материалы для Википедии, опубликованные под свободными лицензиями, размещаются на Викискладе [3], это позволяет использовать их в любых проектах Wikimedia и во всех языковых разделах Википедии.
Среди всех типов карт в Википедии особо выделяются так называемые «позиционные карты». Особенность тут в том, что это не просто изображение карты, но изображение в известной проекции, с известными географическими координатами для углов. Для такой карты, в каждом языковом разделе где она используется, создаётся специальный шаблон, описывающий эти метаданные. Имея такой шаблон, мы можем применять его на любой странице, размещая поверх карты маркеры для интересующих нас объектов. Координаты объектов описываются в виде географических координат, формулы в шаблонах рассчитывают куда именно поставить маркер. Так, например, на страницу о регионе можно вставить карту этого региона и отметить на ней районные центры и крупные города.
Пример использования позиционной карты [4] в карточке статьи об острове Пеббл [5]. Красный маркер и надпись автоматически размещены на месте объекта поверх изображения карты.
Позиционные карты используются во всех статьях об административных единицах: страны/районы/города/посёлки итд., а также во многих статьях о географических объектах. Часто получается так, что сразу после создания позиционной карты она применяется в 20-50 существующих статьях Википедии.
В шаблоне позиционной карты, по идее, должны использоваться сразу два рисунка карты: «контурная»/«политическая» карта, и «физическая»/«географическая» карта с теми же самыми координатами, проекцией и размерами. Контурная карта как правило векторная (SVG), физическая карта может быть векторной, но чаще всего это растр (обычно PNG).
Пример шаблона позиционной карты с двумя типами карт [6]
Позиционных карт нужно много: они должны покрывать все уровни от мира в целом до отдельных районов, небольших островов и т.д. Кроме позиционной карты, для всех административных объектов создаётся т.н. «локатор», это карта, на которой ярким цветом подсвечен интересующий нас район (пример [7] карты-локатора). На «верхнем» уровне (мир, страна) с позиционными картами всё относительно хорошо, но на «нижнем» (уровня районов) часто всё довольно плохо: нет позиционных карт или есть, но недостаточного качества, или выполненные в неподходящем/нестандартном стиле.
Только для РФ мы имеем 83 субъекта, если добавить к этому районы, то получим уже наверное тысячу или больше административных единиц, на каждую из которых нужна позиционная карта, включая контурную карту, физическую карту, карту-локатор… К тому же, время от времени происходят изменения вида «вышло новое постановление»: появляется юридический документ, который меняет границы административных единиц, разделяет/объединяет их и т.п. И конечно, во всех таких случаях нужно перерисовать одну или несколько позиционных карт.
В общем, я думаю вы уже поняли — карты очень нужны и их нужно много :)
Для позиционных карт должны использоваться изображения со свободной лицензией. Это значит, что и исходные данные для таких карт должны быть свободными.
Исходные данные для карт, которыми я пользовался:
В подавляющем большинстве случаев мы работаем с проекцией которая называется «равнопромежуточная цилиндрическая». К этому же семейству проекций относится проекция Меркатора и её частный случай — «проекция Гугла» или «Web Mercator projection», которую используют все основные веб-карты. Формулы для этой проекции довольно просты, к тому же шаблоны позиционных карт уже «знают» эту проекцию.
В немногих остальных случаях придётся погуглить нужную проекцию и почитать специальную литературу, чтобы понять, как именно получаются координаты x,y из широты и долготы. Mediawiki имеет развитый механизм вычисления выражений (в том числе с тригонометрическими функциями), его можно использовать для проверки своих карт, ещё до того как вы сделаете по ним шаблон позиционной карты (примеры можно посмотреть здесь [9]).
Инструментов для создания карт (геоинформационные системы, ГИС) довольно много, в том числе бесплатных и с открытым исходным кодом. Но для того чтобы карта была открытой не обязательно использовать открытую и бесплатную систему, достаточно того чтобы исходные данные были открытыми, и того чтобы вы сами поставили на готовую карту открытую лицензию. (Но тут наверняка есть много нюансов, не берусь залезать в область авторского права, не моё :)
Для создания карт я пользовался в основном тремя программами, описанными ниже.
Maperitive [10] — бесплатный, но закрытый продукт. Крайне полезен при работе с данными OpenStreetMap, работает с данными как с сайта OSM, так и с сохранёнными дампами. Позволяет выбрать стилевик и сохранить карту в формате SVG. Есть ряд готовых стилевиков и можно писать свои. Я подготовил несколько файлов стилей, и использую их для экспорта в SVG границ районов, и карт самих районов с поселениями.
Вообще, Generic Mapping Tools (GMT) это бесплатный набор утилит командной строки, предназначенный для обработки и визуализации научных данных, в том числе ряд его инструментов позволяют работать с геоданными, т.е. мы можем использовать GMT как консольную ГИС. Готовая карта (или отдельный слой для будущей карты) получается в результате последовательности вызова утилит. Обычно я пишу командный файл, в котором задаются все параметры и выполняется вызов утилит. С первого взгляда выглядит сложно, но мне как программисту такой подход кажется понятным и привычным. Кроме того, здесь обеспечивается повторяемость: чтобы создать карту снова, я всегда могу запустить скрипт ещё раз.
Пример командного файла (см. также здесь [11]):
set PATH=C:programsGMT5bin;%PATH%
set GSBIN=C:PROGRA~1gsgs9.04/bin
set COORDSCUT=144.7492/157.3007/42.9694/51.3837
rem width = xmaxsvg / 150.0 * 2.54
set PAPERX=14.9352
rem height = ymaxsvg / 150.0 * 2.54
set PAPERY=16.0189333333333
grdcut.exe ETOPO1_Bed_g_gmt4.grd -R%COORDSCUT% -Gh_cor_cut.grd
grdgradient h_cor_cut.grd -Ne0.3 -A315 -M -Ghi.grd
grdimage h_cor_cut.grd -Ihi.grd -Cwiki-water-verlauf2.cpt -P -R%COORDSCUT% -JX%PAPERX%cd/%PAPERY%cd --PAPER_MEDIA=Custom_%PAPERX%cx%PAPERY%c -X0 -Y0 -K > map.eps
pscoast.exe -JX%PAPERX%cd/%PAPERY%cd -R%COORDSCUT% -Gc -P -Df --PAPER_MEDIA=Custom_%PAPERX%cx%PAPERY%c -X0 -Y0 -O -K >> map.eps
grdimage h_cor_cut.grd -Ihi.grd -Cmount.cpt -P -R%COORDSCUT% -JX%PAPERX%cd/%PAPERY%cd --PAPER_MEDIA=Custom_%PAPERX%cx%PAPERY%c -X0 -Y0 -O -K >> map.eps
pscoast.exe -JX%PAPERX%cd/%PAPERY%cd -R%COORDSCUT% -Q -P -Df --PAPER_MEDIA=Custom_%PAPERX%cx%PAPERY%c -X0 -Y0 -O -K >> map.eps
pscoast.exe -JX%PAPERX%cd/%PAPERY%cd -R%COORDSCUT% -Na -Ia/0.25p,#0978AB -W0.25,#0978AB -P -Df --PAPER_MEDIA=Custom_%PAPERX%cx%PAPERY%c -X0 -Y0 -O >> map.eps
%GSBIN%gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -dEPSCrop -r150 -sOutputFile=Oblast_etopo.png map.eps
Результат:
В составе GMT, вместе с инструментами командной строки также поставляются и данные, этот набор называется GSHHG [12], карты из этих данных создаются с помощью утилиты pscoast
, входящей в GMT.
Inkscape [13] — свободный и открытый векторный графический редактор, основным форматом которого является SVG.
Maperitive и GMT я обычно использую как инструменты для подготовки отдельных слоёв будущей карты. Затем полученные слои импортируются в отдельные слои в документе Inkscape, и вся завершающая работа над картой проходит уже там. Так, например, для позиционной карты нужно, чтобы район, показанный на карте, был «подсвечен» — цветом на контурной карте и затенением на физической карте. Это уже ручная работа над объектами и слоями в Inkscape.
Последним шагом по подготовке изображений карты будет сохранение SVG (для векторной карты) или экспорт PNG (для растровой).
На создание одной карты у меня уходило от 20-30 минут (в простых случаях, когда ряд однотипных карт районов делается как на конвейере), до 4-6 часов (в сложных случаях, когда возникали проблемы с исходными данными и нужно было делать много ручной работы). На физическую карту Канады (см. КДПВ) у меня ушло несколько дней: потребовалось подобрать проекцию, которая уже использовалась на контурной карте.
Если говорить о том «что я от этого получаю», то наверное — массу эстетического удовольствия, от того какие получаются карты.
Спасибо что дочитали, надеюсь, мой опыт вам как-нибудь пригодится :)
Автор: nzeemin
Источник [14]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/kartografiya/317423
Ссылки в тексте:
[1] более 300 карт: https://ru.wikipedia.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Nzeemin/%D0%9A%D0%B0%D1%80%D1%82%D1%8B
[2] Физическая карта Канады: https://commons.wikimedia.org/wiki/File:Relief_map_of_Canada.png
[3] Викискладе: https://commons.wikimedia.org
[4] позиционной карты: https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D0%BE%D0%B7%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%92%D0%B5%D0%BB%D0%B8%D0%BA%D0%BE%D0%B1%D1%80%D0%B8%D1%82%D0%B0%D0%BD%D0%B8%D1%8F_%D0%A4%D0%BE%D0%BB%D0%BA%D0%BB%D0%B5%D0%BD%D0%B4%D1%81%D0%BA%D0%B8%D0%B5_%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B2%D0%B0
[5] Пеббл: https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D0%B1%D0%B1%D0%BB
[6] Пример шаблона позиционной карты с двумя типами карт: https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D0%BE%D0%B7%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%9A%D0%B0%D0%B7%D0%B0%D1%85%D1%81%D1%82%D0%B0%D0%BD_%D0%92%D0%BE%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%BE-%D0%9A%D0%B0%D0%B7%D0%B0%D1%85%D1%81%D1%82%D0%B0%D0%BD%D1%81%D0%BA%D0%B0%D1%8F_%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C
[7] пример: https://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:East_Kazakhstan_in_Kazakhstan.svg
[8] SRTM: https://ru.wikipedia.org/wiki/Shuttle_Radar_Topography_Mission
[9] здесь: https://ru.wikipedia.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Nzeemin/%D0%9F%D0%BE%D0%B7%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%86%D0%B8%D0%B8
[10] Maperitive: http://maperitive.net/
[11] здесь: https://ru.wikipedia.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Nzeemin/%D0%9A%D0%B0%D1%80%D1%82%D1%8B/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D0%BB%D1%8C%D0%B5%D1%84%D0%B0
[12] GSHHG: http://www.soest.hawaii.edu/pwessel/gshhg/
[13] Inkscape: https://inkscape.org/
[14] Источник: https://habr.com/ru/post/451418/?utm_campaign=451418
Нажмите здесь для печати.