SASGIS

Веб-картография и навигация

SAS.Wiki

Веб-картография и навигация

Инструменты пользователя

Инструменты сайта


простой_пример

Это старая версия документа.


Создание zmp - простой пример

Пошаговая инструкция писалась на форуме параллельно с созданием zmp для спутникового снимка города Мальмо, http://malmo.se/karta.


1. Надо посмотреть, из чего состоит карта. И если она состоит из тайлов (квадратных картинок), надо определить URL каждого тайла.

Я пользуюсь браузером Firefox, установлены плагины AdBlockPlus (совершенно необходимый плагин, используется по прямому назначению, а также помогает посмотреть, из чего сделан сайт) и HttpFox (необязательный, но удобный плагин, показывает все запросы и ответы). В клинических случаях приходится пользоваться снифером Wireshark. Также рекомендую JavaScript Deobfuscator, но это явно не для простого примера.

Часто никакие плагины и не нужны.

Первым делом надо сделать так, чтобы по правой кнопке мыши на карте вызывалось контекстное меню Firefox. Для этого идём в настройки Firefox (я предпочитаю англоязычный интерфейс): tools - options - content - кнопка Advanced справа от Enable JavaScript - там убрать все галочки.

Заходим на сайт нужной карты, для примера, http://malmo.se/karta Выбираем интересующий вид - Fotokarta 2011. Кликаем правой кнопкой. В контекстном меню, к сожалению, нет View Image Info, но есть View Page Info. Тоже хорошо, кликаем туда. В этом Page Info переходим на закладку Media и ищем нужные тайлы.

Во-первых, они есть, что не может не радовать :-) Тип jpeg, размер 256х256 - это оч. хорошо, т.к. САС работает только с таким размером тайлов (если размер отличается, САС умеет сжимать или растягивать, с потерей качества, конечно).

Выглядят адреса так:

  http://xyz.malmo.se/data_e/tilecache/malmo/malmo_ortofoto_2011/03/000/000/020/000/000/016.jpeg
  http://xyz.malmo.se/data_e/tilecache/malmo/malmo_ortofoto_2011/03/000/000/019/000/000/016.jpeg
  http://xyz.malmo.se/data_e/tilecache/malmo/malmo_ortofoto_2011/03/000/000/018/000/000/016.jpeg
  http://xyz.malmo.se/data_e/tilecache/malmo/malmo_ortofoto_2011/03/000/000/018/000/000/017.jpeg

Здесь неизменная часть адреса -

  http://xyz.malmo.se/data_e/tilecache/malmo/malmo_ortofoto_2011/

03 - очевидно, зум, 020 - видимо, Х, 016 - видимо, Y (а может, и наоборот), остальные 000 непонятно зачем, да и не важно.

Сразу замечаем, что карта без привязки :-( Если бы была с привязкой, номера тайлов были бы гораздо больше.

По поводу привязки, имеет смысл проверить. Слева какой-то стадион на malmo.se, зум 3, справа он же на Гугле, зум 15 (если считать от нуля).

http://xyz.malmo.se/data_e/tilecache/malmo/malmo_ortofoto_2011/03/000/000/019/000/000/017.jpeghttp://khm3.google.com/kh/v=101&hl=ru&x=17566&y=10270&z=15&s=Ga

Видно, что они не совпадают, так что привязывать можно и не пытаться.


2. Теперь надо сделать zmp. Берём какую-нибудь простую локальную карту, например, Maps\sas.maps\Local\visicom.zmp, копируем директорию visicom.zmp в директорию Maps, переименовываем в malmo.se.sat.zmp.

В директории обязательно д.б. эти 4 файла:

  18.bmp
  24.bmp
  GetUrlScript.txt
  params.txt

Подробнее о них написано в разделе Описание формата пользовательских карт zmp

Редактируем params.txt. Самые главные параметры:

GUID - обязательно должен быть уникальным (т.е. на всех zmp разным). Если у двух карт GUID совпадает, при запуске SAS.Планеты появится сообщение об ошибке. Рекомендуется его генерировать на сайте Online GUID Generator, или с помощью специальной программы getguid.zip. Можно исправить и вручную (в этом примере я просто исправил одну цифру).

  GUID={63866E5D-09F2-4732-9D21-6350124302CB}

Имя карты и подменю на 3-х языках:

  name=Спутник Мальмо (malmo.se)
  name_en=Malmo Sat (malmo.se)
  name_uk=Супутник Мальмо (malmo.se)
  ParentSubMenu=Локальные карты
  ParentSubMenu_en=Local maps
  ParentSubMenu_uk=Локальні карти

Директория, в которой хранится кэш. Тоже должна быть уникальной:

  NameInCache=malmo.se.sat

Неизменная часть URL:

  DefURLBase=http://xyz.malmo.se/data_e/tilecache/malmo/malmo_ortofoto_2011/

Тип файлов:

  ContentType=image/jpeg
  Ext=.jpg

Остальное можно пока не трогать.


3. Теперь надо написать паскаль-скрипт, который будет генерировать изменяемую часть адреса. Редактируем GetUrlScript.txt.

В САСе зумы считаются от 1 до 24, во всех (или почти всех) картах от нуля. На карте Мальмо на зуме 0, кажется, всего 16 тайлов, X и Y от 0 до 3. Значит, зума 3 в САСе будет достаточно. Так что будем использовать GetZ-3. Максимальный зум на сайте 6, номера тайлов не превышают 999.

  begin
  ResultURL:=GetURLBase+IntToStr(GetZ-3)+'/000/000/'+IntToStr(GetX)+'/000/000/'+IntToStr(GetY)+'.jpeg';
  end.

Вроде похоже, только X и Y на этой карте в виде 3-значных чисел, надо проверить, будет ли работать с 1- или 2-значными. А Z должна быть 2-значной.

Берём URL http://xyz.malmo.se/data_e/tilecache/malmo/malmo_ortofoto_2011/03/000/000/019/000/000/017.jpeg открываем его браузером (картинка открывается), меняем 019 на 19, а 017 на 17 - фигушки, не работает. Придётся исправить скрипт так, чтобы добавлялись незначащие нули до трёх знаков. Например, if…

Конечно, можно добавить для начала нули вручную и посмотреть, что получится:

  ResultURL:=GetURLBase+'0'+IntToStr(GetZ-3)+'/000/000/00'+IntToStr(GetX)+'/000/000/00'+IntToStr(GetY)+'.jpeg';

(понятно, что работать будет только до X,Y,Z ⇐ 9).

Теперь можно запустить САС.Планету.

Запускаем, переходим на зум 3, выбираем нашу карту и смотрим что вышло:

Ну, уже как бы неплохо :-D

Как видно, на malmo.se координата Y считается снизу вверх, а в САС.Планете сверху вниз. Надо тоже исправить в скрипте.

Перевод этой страницы: