В этой заметке я расскажу, как можно использовать программу MapTiler для подготовки тайлов для создания собственной карты, с использованием API Google Maps.
На блоге я уже рассматривал тему о создании собственной карты, смотри здесь.
В частности в статье «Создание собственных карт с использованием API Google Maps».
И для подготовки тайлов, в упомянутой заметке, использовался сервис Gmap Uploader.
Подготовить набор тайлов можно с помощью программы MapTiler, скачать ее можно с сайта программы
.
В данный момент доступна беттта-версия программы для различных операционных систем (Microsoft Windows, Mac OS X Leopard (10.5), Snow Leopard (10.6), Ubuntu / Debian Linux).
И так в начале нам нужно загрузить и установить программу MapTiler.
После этого необходимо подготовить растровый файл с изображением будущей карты.
MapTiler поддерживает большинство распространенных растровых форматов: TIFF/GeoTIFF, MrSID, ECW, JPEG2000, Erdas HFA, NOAA BSB, JPEG.
Для использования в программе, растр должен иметь географическую привязку, т. е. определенное соответствие между пиксельными координатами на изображении и географическими координатами карты.
Для осуществления привязки можно воспользоваться различными ГИС-программами, ка платными, так и бесплатными.
Приведу несколько вариантов использования бесплатных программ:
1. Google Earth (Планета Земля) — можно наложить растровое изображение так, чтобы оно максимально совпадало с космоснимком и сохранить полученные координаты в KML-файл. Недостаток — низкая точность привязки.
2. Программа QGIS — загрузить можно с официального сайта или с помощью установщика OSGeo4W (описание установки Установка QGIS/GRASS с помощью OSGeo4W.
Пошаговый процесс описан в статье «Географическая привязка данных в QGIS».
3. Библиотека GDAL Процесс привязки описан в статье «Использование GDAL для привязки растровых материалов».
После процедуры привязки, мы имеем растровый файл в формате geo-tif, который включает в себя информацию о привязке или растровый файл с отдельным файлом привязки в формате Arcview (world-файл) , *.tab OziExplorer.
Запускаем программу MapTiler.
Выбираем метод генерации Google Maps compatible.
Затем нажимаем Continue и переходим к следующему окну, в котором мы должны выбрать нужный нам растровый файл.
Если файл уже привязан, то кнопку Georeference нажимать не нужно, мы переходим сразу к Continue. Для того, чтобы сделать прозрачную подложку растру (ставим галочку Set transparency for a color (NODATA).
В следующем окне нам необходимо определить систему координат и проекцию. У растров с правильно прописанной информацией о привязке, ее параметры должны определиться автоматически.
Если нас такое определение не устраивает, можно задать проекцию вручную и обязательно нажать Set.
В следующем окне можно выбрать минимальный и максимальный масштаб и формат выходной мозаики (png с прозрачностью или jpg без прозрачности). ВНИМАНИЕ: если мышкой выбрать формат не получается, нажмите «стрелку вниз» на клавиатуре.
Далее нужно выбрать каталог, куда будут сохраняться тайлы
Следущий этап — указать какие файлы генерировать, выбираем Google Maps и нажимаем Continue.
Далее вводим данные для карты.
Определяем только название карты, остальное нам не нужно. Название лучше задать латиницей.
В следующем окне мы нажимаем на кнопку Render и запускаем процесс создания файлов.
Через некоторое время, если все прошло успешно, то мы увидим сообщение
Нажимаем по ссылке и переходим в папку с файлами.
Открываем файл googlemaps.html в браузере и наблюдаем нашу карту.
Код файла googlemaps.html использует API Google Maps версии 2, если Вы хотите иметь возможность работать с API Google Maps версии 3 смотрите код из другого примера.
Пример с API Google Maps версии 3
Для того, чтобы адаптировать пример для Вашей карты нужно сделать два исправления в файле maptiler-gmapv3.html
Определить область mapBounds взяв данные из строки файла googlemaps.html
var mapBounds = new GLatLngBounds(new GLatLng(56.4642211211, 43.5215637534), new GLatLng(56.5461210069, 43.6229738095)); |
и подставив соответствующие значения координатат в строки файла maptiler-gmapv3.html
var mapBounds = new google.maps.LatLngBounds( new google.maps.LatLng(56.4642211211, 43.5215637534), new google.maps.LatLng(56.5461210069, 43.6229738095)); |
Определить минимальный и максимальный уровень масштаба
Значения из строк файла googlemaps.html
var mapMinZoom = 11; var mapMaxZoom = 14; |
В стоки файла maptiler-gmapv3.html
var mapMinZoom = 11; var mapMaxZoom = 14; |
Следуя принцыпу лучще один раз увидеть, чем сто раз прочитать я записал два видео, которые помогут Вам разобраться с программой MapTiler.
1. Процесс географическая привязки данных в QGIS.
2. Работаем с программой MapTiler подготовки тайлов для создания собственной карты с помощью API Google Maps.
Можете перезалить файл отсюда http://help.maptiler.org/betatest/ , к себе на сайт либо на файлообменник?
У меня не открывает эту страницу
maptiler-1.0-beta2-setup.exe
а можно полный исходник с api v3? не получается. наложеная карта пропадает
Файл с полным архивом проекта
где-бы точки не прописывал бы, постоянно пишет:
Не удалось рассчитать трансформацию по контрольным точкам. Данная трансформация неразрешима.
16384×16384
QGIS: 1.7.0
вообще привязка мне и не нужна. Нужно просто нарезать на тайлы, но к сожалению gmapuploader и яндекс-програмуля не подходят из за порчи изображения при ресайзе. В принципе можно уменьшать вручную и резать яндексом, но хотелось бы чтоб всё автоматом.
хотя если в самом начале выбрать Image Based Tiles (Raster)
можно и без привязки
Подскажыте как сделать новый тип карты на котором отображалось только мои тайли без гугловских. Примерно как в Gmap Uploader.
Нужно создать свой тип карты и показывать только его.
Пример реализации
Сергей, подскажите пожалуйста:
заряжаю в qgis jpg карты размером 28420х30000 (по ходу макс.по размеру, который можна засунуть в jpg из photoshop, размер скажу, на пределе желаемого качества).
запускаю по видеинструкции, генерируется .tif, но на 60% ее размер доходит до 4 гиг и я получаю ошибку. то есть до сжатия lzw процесс не доходит
как изменить параметры выходного файла .tiff, например чтоб результат формировался в 8бит (графика на карте не пострадает, главное детализация для меня)?
Сразу ответить не могу, надо подумать пару дней.