В Google maps используется 20 уровней увеличения. Для первого уровня увеличения вся поверхность земли представлена одним фрагментом. На втором уровне детальность изображения в 2 раза выше и уже 4 фрагмента нужно, чтобы покрыть весь земной шар. На третьем 16, на четвертом 256. Эти фрагменты представляют собой файлы изображений размером 256 х 256 точек (пикселей) и называются тайлами. Из них, как из пазлов, собирается полное изображение.
Изображение карты Google maps 2-го уровня увеличения, состоящее из 4-х фрагментов 256х256 пикселей.
Расчетное разрешение снимков 19-го уровня приблизительно 60 см. Для этого уровня используются снимки со спутника Quick Bird разрешением не лучше чем 61 см в пикселе. 20-й уровень припасен для аероснимков, но покрытие снимками 20-го уровня очень незначительное (лишь некоторые европейские и американские города). Для снимков с увеличением 15 и ниже используются данные со спутников Landsat с разрешением не лучше чем 15 м в пикселе.
Эти снимки представляют собой изображение земного шара на плоскости, следовательно, чтобы их обработать, использовалась картографическая проекция (о проекциях можно почитать здесь). В Google maps используется поперечная цилиндрическая проекция Меркатора. Снимки ортотрансформированы с использованием общемировой модели рельефа и всегда ориентированы на север.
Итак, мы уже знаем, как весь земной шар покрывается снимками с двукратным увеличением разрешения для каждого следующего уровня. Но не понятно, зачем это нужно? Идея здесь простая – не загружать лишнего. Если вы в данный момент рассматриваете на сайте Google maps свой дом в максимально доступном увеличении, то на ваш компьютер незачем загружать снимки с изображением Эйфелевой башни. Если же вы изучаете контуры материков, то нет смысла загружать детальные снимки, с изображением городских улиц. Фрагменты за пределами экрана не загружаются. А число фрагментов в пределах экрана не превысит десятка-двух при любом положении ползунка уровня увеличения.
Вот так устроен Google maps. Только число фрагментов не настолько велико как число зернышек в индийской легенде. Например, хранение всех снимков 19-го уровня в сжатом виде требует всего около 1200-1500 ТБ. При этом надо учесть, что снимками этого увеличения покрыта лишь малая часть площади материков, еще нужно отбросить все океаны и моря, для которых просто не требуется таких детальных снимков.
Каждый фрагмент изображения имеет свое уникальное имя, по которому можно однозначно определить его положение в общей мозаике, а значит географические координаты его углов. Файлы изображений передаются по протоколу HTTP, так же как и веб-странички Интернета.
Имеется 3 вида изображений: спутниковые снимки, карта, снимки + карта. Карта при этом хоть и выглядит векторной, тем не менее, является растровой. Оговоренные принципы справедливы для всех видов изображений. Единственное отличие в том, что для космических снимков используется JPEG формат, а для карты - PNG. PNG это тоже растровый формат, как и JPEG, но он имеет лучшую, по сравнению с ним, степень сжатия для схематических изображений с ограниченным количеством цветов (какими являются карты и планы). При этом в PNG используется сжатие без потери качества картинки.
Все описанное выше справедливо не только для Google maps но и для большинства картографических веб-сервисов. Однако компания Google имеет еще и отдельное приложение Google Earth (Google планета Земля). Его не следует путать с сервисом Google maps. Работает Google Earth несколько иначе и получает данные с других серверов. В Google Earth кроме космических снимков может отображаться модель рельефа и трехмерные модели зданий, чего нет в Google maps.
Основной формат данных для Google Earth – KML. Это формат передачи векторной информации и основан он на популярном в Интернет XML формате. В KML могут храниться точки, линии, полигоны и их атрибуты. KMZ – это упакованный при помощи ZIP сжатия KML файл. По-сути это обычный архив, который может содержать кроме файлов KML еще дополнительные файлы: иконки, фотографии, 3D модели, текстуры, HTML страницы.
Теперь, когда теория ясна, приступим к практике.