July 25th, 2011

dog

Картография - Часть 7 - Как скачать снимки Google Maps

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

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

   Для начала определитесь с источниками материала: какие области следует скачать с Google Maps, какие с Яндекс Карт? Обычно Яндекс Картами пользуются для мозаики незаселённой территории, которая у них заметно лучше Google (6 м против 15 м). Населённые пункты в Яндексе не часто, но иногда бывают качественней чем на Google - по крайней мере насколько мне приходилось сталкиваться.

   В нашем примере мы будем брать все данные с Google. Визуально нужный нам населённый пункт состоит из двух снимков не пригодного к оцифровке 1 метрового Ikonos (чуть позже мы убедимся в собственных предположениях):

61.40 КБ


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

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

   То, что будет изложено дальше - всего лишь удобный способ сохранить мозаику снимков Google Maps на определённую территорию, в виде единого файла JPEG с готовой информацией о координатах привязки изображения.



   В первую очередь следует скачать из сети небольшую программу MapBuilder (последняя версия 1.9). Официальный сайт программы нынче удалён, но она уже распространилась по многим варезникам и ищется легко.

   Устанавливать программу не нужно - просто создаём папку, например C:\MapBuilder\ и распаковываем туда содержимое архива. Огромное спасибо автору разработавшему и дошлифовавшему эту замечательную утилиту!

   Перед запуском программы открываем в редакторе файл mbconfig.txt и находим секцию:

SATURL=http://khm0.google.com/kh/
SATURL=http://khm1.google.com/kh/
SATURL=http://khm2.google.com/kh/
SATURL=http://khm3.google.com/kh/
SATPARAM=v=80&hl=ru&

   Здесь перечислены URL-адреса серверов, на которых Google хранит фрагменты мозаик снимков. Возможно, что в будущем перечень этих серверов изменится, или изменится формат запросов к ним.

   А пока обратим внимание на параметр v=80 - это номер версии. Google поддерживает версионность снимков и позволяет скачивать все предыдущие варианты снимков заданной территории. Аналогичный параметр используется и для карт Яндекса.

   Ваша задача - узнать, какая сейчас самая актуальная версия снимков используется в Google. Для этого нам понадобится плагин LiveHTTPHeaders к браузеру Mozilla FireFox.

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

71.20 КБ


   Итак, текущая версия снимков Google - 89. Исправляем соответствующим образом файл mbconfig.txt.




   Запускаем программу, заходим в настройки и указываем каталог кэша, куда будут помещаться скаченные блоки. Учтите, что размер архивной директории может достигать нескольких гигабайт. Формат архивной директории выбираем "Прогрессивный":

40.53 КБ


   Самый простой способ указать MapBuilder'у, какую часть карты надо скачивать - это подогнать размеры окна браузера под нужный фрагмент карты, затем сгенерировать ссылку на текущую область и передать её в MapBuilder:

47.30 КБ


   Более точный способ - задать координаты четырёх границ прямоугольника. В этом нам поможет приложение Google Earth, так как Google Maps не умеет отображать текущие координаты курсора.

   Ещё одна причина, почему следует пользоваться Google Earth а не Google Maps - это разные мозаики снимков. Google Maps до определённого масштаба не отображает качественные снимки, даже если они покрывают данную территорию - вместо этого на мелких масштабах вся территория покрыта данными Landsat. Google Earth же отображает мозаику из всех снимков, включая высококачественные, независимо от текущего масштаба. Это очень удобно:

80.01 КБ


   Координаты из Google Earth можно переносить в MapBuilder в том же виде, в котором они отображаются на экране:

42.34 КБ


   Границы загружаемых областей следует определять с запасом относительно официальной границы населённого пункта. Узнать официальные границы можно несколькими способами (в порядке возрастания сложности):

•  Посмотреть на топографической карте Яндекса
•  Поискать город на сервисе kosmosnimki.ru (после успешного поиска сервис показывает контуры границ населённого пункта)
•  Найти в сети сканированную бумажную карту города
•  Найти в сети свежее постановление муниципальной администрации об утверждении границ населённого пункта.

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

   Загрузка спутниковых растров Google в MapBuilder обычно проходит в два этапа: сначала загружается 14-й, потом 19-й уровень. 14-й уровень сформирует отдельный растровый файл с подложкой LandSat на всю территорию региона. А 19-й уровень загрузит высокоточные снимки, при этом оставив области, для которых нет ничего кроме подложки LandSat пустыми. Обратите внимание, что заказывать загрузку в MapBuilder нужно снимков GM.SAT, а не Google Earth.

   19-го уровня достаточно для загрузки всех высокоточных растров Google, включая GeoEye. Загрузки выше 19-го уровня для территории России бессмысленны, так как ортофотопланов, которые требовали бы больший уровень точности, на территории РФ в Google Maps нет.

   Для загрузки снимков подложки Яндекса обычно используется 13-й уровень.



   Программа скачивает блоки - небольшие квадратные плитки, из которых состоят все карты Google Maps. Если уж быть совсем точным, то правильное название таких блоков - "тайлы" (tiles). После запуска программа выдаёт два информирующих сообщения, очень полезных для понимания происходящего:

21.91 КБ


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

16.85 КБ


   Иногда в ходе загрузки больших объёмов данных вы можете столкнуться с такими сообщениями:

8.65 КБ     23.50 КБ


   Это означает, что Google вас забанил. Если у вас динамический IP - вполне вероятно, что вам будет достаточно переконнектиться. Но если ваш IP адрес постоянен - не расстраивайтесь: есть способ помочь вашему горю.

   Для этого достаточно зайти в браузере на один из URL-адресов, когда-то отловленных в LiveHTTPHeaders. Например: http://khm3.google.com/kh/v=80&hl=ru&x=156258&y=79517&z=18&s=Gal

   В случае, если вас действительно забанил Google вместо картинки тайла вы увидите приглашение ввести капчу:

67.97 КБ


Включите отслеживание заголовков и введите капчу - в ответ у вас должно появиться оригинальное изображение тайла. Таким образом вы сможете обнаружить, какую Cookie научился ставить ваш браузер, чтобы на какое-то очередное время объяснить Google, что вы - не робот:

37.53 КБ     84.70 КБ




   Дальше вам поможет ещё одна интересная программа: The Proxomitron. Это настольный прокси-сервер с удивительно гибкими возможностями.

   Устанавливаем (или распаковываем - The Proxomitron не держит никаких файлов за пределами своего каталога и не вносит изменений в реестр), запускаем. Нажимаем кнопку "Headers", находим пункт "Cookie: Fake a cookie (out)" и нажимаем кнопку "Edit". В поле "Replacement text" вводим полностью содержимое строки с кукой, пойманной с помощью LiveHTTPHeaders:

28.08 КБ


   Для приведения подстановки куки в действие: сначала ставим галочку в колонке "Out" окна заголовков, а затем и в основном окне программы:

39.90 КБ     27.27 КБ


   После всех произведённых действий не забудьте перенастроить MapBuilder на работу через новоиспечённый прокси.

   Сразу скажу, что данная мера помогает только на определённый объём загрузки (обычно около 100-500 Мб), после чего Google вас снова банит, и история повторяется сначала. Тем не менее, данный инструментарий позволяет эффективно загружать космические изображения с сервиса Google Maps.

   В результате работы MapBuilder-а будут созданы два файла: JPG, содержащий картинку и MAP содержащий привязку растра к реальным координатам в формате OziExplorer'а. О том, что делать с этими файлами будет рассказано дальше.