SASGIS

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

SAS.Wiki

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

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

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


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

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

простой_пример [13/02/2012 10:43]
tolik
простой_пример [13/02/2021 22:15] (текущий)
radioxoma Ограничение зума
Строка 1: Строка 1:
 ====== Создание zmp - простой пример ====== ====== Создание zmp - простой пример ======
  
-Пошаговая инструкция писалась [[http://​sasgis.ru/​forum/​viewtopic.php?​p=26156#​p26156|на форуме]] параллельно с созданием zmp для спутникового снимка города Мальмо, http://​malmo.se/​karta. ​+Эта пошаговая инструкция писалась [[http://​sasgis.org/​forum/​viewtopic.php?​p=26156#​p26156|на форуме]] параллельно с созданием zmp для спутникового снимка города Ма́льмё, http://​malmo.se/​karta. ​
 ---- ----
  
Строка 7: Строка 7:
 **1.** Надо посмотреть,​ из чего состоит карта. И если она состоит из тайлов (квадратных картинок),​ надо определить URL каждого тайла. **1.** Надо посмотреть,​ из чего состоит карта. И если она состоит из тайлов (квадратных картинок),​ надо определить URL каждого тайла.
  
-Я пользуюсь браузером Firefox, установлены плагины AdBlockPlus (совершенно необходимый плагин,​ используется по прямому назначению,​ а также помогает ​посмотреть, из чего ​сделан сайт) и HttpFox (необязательный,​ но удобный плагин,​ показывает все запросы и ответы). В клинических случаях приходится пользоваться снифером Wireshark. Также рекомендую JavaScript Deobfuscator,​ но это явно не для простого примера.+Я пользуюсь браузером Firefox, установлены плагины AdBlockPlus (совершенно необходимый плагин,​ используется по прямому назначению,​ а также показывает ​все картинки на странице) и HttpFox (необязательный,​ но удобный плагин,​ показывает все запросы и ответы ​http). В клинических случаях приходится пользоваться снифером Wireshark. Также рекомендую JavaScript Deobfuscator,​ но это явно не для простого примера.
  
 Часто никакие плагины и не нужны. Часто никакие плагины и не нужны.
  
-Первым делом надо сделать так, чтобы по правой кнопке мыши на карте вызывалось контекстное меню Firefox. Для этого идём в настройки Firefox ​(я предпочитаю англоязычный интерфейс)tools options ​content ​- кнопка Advanced справа от Enable JavaScript - там убрать все галочки.+Первым делом надо сделать так, чтобы по правой кнопке мыши на карте вызывалось контекстное меню Firefox. Для этого идём в настройки Firefox: ​Tools Options ​Content ​- кнопка Advanced справа от Enable JavaScript - там убрать все галочки
 +**Update:** в новых версиях FireFox этих настроек в меню нет. Для того, чтобы запретить JavaScript подменять контекстное меню, надо в адресной строке набрать about:​config,​ найти параметр dom.event.contextmenu.enabled и изменить его на false.
  
 Заходим на сайт нужной карты, для примера,​ http://​malmo.se/​karta Заходим на сайт нужной карты, для примера,​ http://​malmo.se/​karta
Строка 19: Строка 20:
  
 Во-первых,​ они есть, что не может не радовать :-) Во-первых,​ они есть, что не может не радовать :-)
-Тип jpeg, размер 256х256 - это очхорошо,​ т.к. САС работает только с таким размером тайлов (если размер отличается,​ САС умеет сжимать или растягивать,​ с потерей качества,​ конечно).+Тип 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/​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/​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/​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/​000/​000/​018/​000/​000/​017.jpeg
  
  
 Здесь неизменная часть адреса -  Здесь неизменная часть адреса - 
-    ​http://​xyz.malmo.se/​data_e/​tilecache/​malmo/​malmo_ortofoto_2011/​+ 
 +  ​http://​xyz.malmo.se/​data_e/​tilecache/​malmo/​malmo_ortofoto_2011/​
  
 03 - очевидно,​ зум, 020 - видимо,​ Х, 016 - видимо,​ Y (а может, и наоборот),​ остальные 000 непонятно зачем, да и не важно. 03 - очевидно,​ зум, 020 - видимо,​ Х, 016 - видимо,​ Y (а может, и наоборот),​ остальные 000 непонятно зачем, да и не важно.
Строка 37: Строка 39:
 Если бы была с привязкой,​ номера тайлов были бы гораздо больше. Если бы была с привязкой,​ номера тайлов были бы гораздо больше.
  
-По поводу привязки,​ имеет смысл проверить.+По поводу привязки,​ имеет смысл проверить, насколько всё плохо. 
 Слева какой-то стадион на malmo.se, зум 3, справа он же на Гугле, зум 15 (если считать от нуля). Слева какой-то стадион на malmo.se, зум 3, справа он же на Гугле, зум 15 (если считать от нуля).
  
Строка 48: Строка 51:
 ---- ----
  
-**2.** Теперь надо сделать zmp+**2.** Теперь надо сделать ​**zmp**.
-Берём какую-нибудь простую локальную карту, например,​ Maps\sas.maps\Local\visicom.zmp,​ копируем директорию visicom.zmp в директорию Maps, переименовываем в malmo.se.sat.zmp.+
  
-В директории ​обязательно д.бэти 4 файла:+Берём какую-нибудь простую локальную карту, например,​ Maps\sas.maps\Local\visicom.zmp,​ копируем ​директорию visicom.zmp в директорию Maps, переименовываем в **malmo.se.sat.zmp**.
  
-    18.bmp +В директории обязательно должны быть эти 4 файла:
-    24.bmp +
-    GetUrlScript.txt +
-    params.txt+
  
-Подробнее о них написано в разделе [[описания_формата_пользовательских_карт_zmp|Описание формата пользовательских карт zmp]]+  * 18.bmp 
 +  * 24.bmp 
 +  * GetUrlScript.txt 
 +  * params.txt 
 + 
 +Подробнее о них написано в разделе [[zmp|Описание формата пользовательских карт zmp]]
  
 Редактируем **params.txt**. Самые главные параметры:​ Редактируем **params.txt**. Самые главные параметры:​
Строка 66: Строка 70:
 Рекомендуется его генерировать на сайте [[http://​www.guidgenerator.com/​online-guid-generator.aspx|Online GUID Generator]] или с помощью специальной программы {{:​getguid.zip|}}. Можно исправить и вручную (в этом примере я просто исправил одну цифру). ​ Рекомендуется его генерировать на сайте [[http://​www.guidgenerator.com/​online-guid-generator.aspx|Online GUID Generator]] или с помощью специальной программы {{:​getguid.zip|}}. Можно исправить и вручную (в этом примере я просто исправил одну цифру). ​
  
-    ​GUID={63866E5D-09F2-4732-9D21-6350124302CB}+  ​GUID={63866E5D-09F2-4732-9D21-6350124302CB}
  
  
 Имя карты и подменю на 3-х языках:​ Имя карты и подменю на 3-х языках:​
  
-    ​name=Спутник Мальмо (malmo.se) +  ​name=Спутник Мальмё (malmo.se) 
-    name_en=Malmo Sat (malmo.se) +  name_en=Malmö ​Sat (malmo.se) 
-    name_uk=Супутник Мальмо (malmo.se) +  name_uk=Супутник Мальме (malmo.se) 
-    ParentSubMenu=Локальные карты +  ParentSubMenu=Локальные карты 
-    ParentSubMenu_en=Local maps +  ParentSubMenu_en=Local maps 
-    ParentSubMenu_uk=Локальні карти +  ParentSubMenu_uk=Локальні карти
  
 Директория,​ в которой хранится кэш. Тоже должна быть уникальной:​ Директория,​ в которой хранится кэш. Тоже должна быть уникальной:​
  
-    ​NameInCache=malmo.se.sat+  ​NameInCache=malmo.se.sat
  
 Неизменная часть URL: Неизменная часть URL:
  
-    ​DefURLBase=http://​xyz.malmo.se/​data_e/​tilecache/​malmo/​malmo_ortofoto_2011/​+  ​DefURLBase=http://​xyz.malmo.se/​data_e/​tilecache/​malmo/​malmo_ortofoto_2011/​
  
 Тип файлов:​ Тип файлов:​
  
-    ​ContentType=image/​jpeg +  ​ContentType=image/​jpeg 
-    Ext=.jpg+  Ext=.jpg
  
  
Строка 98: Строка 101:
  
 **3.** Теперь надо написать паскаль-скрипт,​ который будет генерировать изменяемую часть адреса. **3.** Теперь надо написать паскаль-скрипт,​ который будет генерировать изменяемую часть адреса.
-Редактируем GetUrlScript.txt.+Редактируем ​**GetUrlScript.txt**.
  
 В САСе зумы считаются от 1 до 24, во всех (или почти всех) картах от нуля. В САСе зумы считаются от 1 до 24, во всех (или почти всех) картах от нуля.
-На карте Мальмо на зуме 0, кажется, ​всего 16 тайлов,​ X и Y от 0 до 3. Значит,​ зума 3 в САСе будет достаточно. Так что будем использовать GetZ-3.+ 
 +На карте Мальмё на зуме 0, кажется, ​не больше ​16 тайлов,​ X и Y от 0 до 3. Значит,​ зума 3 в САСе будет достаточно ​(на этом зуме всего 16 тайлов). Так что будем использовать GetZ-3.
 Максимальный зум на сайте 6, номера тайлов не превышают 999. Максимальный зум на сайте 6, номера тайлов не превышают 999.
  
-    begin +Самый простой скрипт получается таким:
-      ResultURL:=GetURLBase+IntToStr(GetZ-3)+'/​000/​000/'​+IntToStr(GetX)+'/​000/​000/'​+IntToStr(GetY)+'​.jpeg';​ +
-    end.+
  
 +<code delphi>
 +begin
 +  ResultURL:​=GetURLBase+IntToStr(GetZ-3)+'/​000/​000/'​+IntToStr(GetX)+'/​000/​000/'​+IntToStr(GetY)+'​.jpeg';​
 +end.
 +</​code>​
  
 Вроде похоже,​ только X и Y на этой карте в виде 3-значных чисел, надо проверить,​ будет ли работать с 1- или 2-значными. Вроде похоже,​ только X и Y на этой карте в виде 3-значных чисел, надо проверить,​ будет ли работать с 1- или 2-значными.
 А Z должна быть 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 - фигушки,​ не работает. +Берём 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... Например,​ if...
  
 Конечно,​ можно добавить для начала нули вручную и посмотреть,​ что получится:​ Конечно,​ можно добавить для начала нули вручную и посмотреть,​ что получится:​
  
-    ​begin +<code delphi>​ 
-      ResultURL:​=GetURLBase+'​0'​+IntToStr(GetZ-3)+'/​000/​000/​00'​+IntToStr(GetX)+'/​000/​000/​00'​+IntToStr(GetY)+'​.jpeg';​ +begin 
-    end; +  ResultURL:​=GetURLBase+'​0'​+IntToStr(GetZ-3)+'/​000/​000/​00'​+IntToStr(GetX)+'/​000/​000/​00'​+IntToStr(GetY)+'​.jpeg';​ 
-     +end; 
-(понятно,​ что работать будет только до X,Y,Z ≤ 9).+</​code>​ 
 + 
 +(понятно,​ что работать будет только для X,Y,Z ≤ 9).
  
 Теперь можно запустить SAS.Планету. Теперь можно запустить SAS.Планету.
Строка 135: Строка 144:
 Как видно, на malmo.se координата Y считается снизу вверх, а в SAS.Планете сверху вниз. Как видно, на malmo.se координата Y считается снизу вверх, а в SAS.Планете сверху вниз.
 Надо тоже исправить в скрипте. Надо тоже исправить в скрипте.
 +
 +----
 +
 +**4.** Для того, чтобы перевернуть карту, надо написать так:
 +
 +  Y := round(intpower(2,​GetZ-1)) - 1 - GetY
 +
 +''​2^(Z-1)''​ - это число тайлов по каждой координате для зума Z. Использовать round приходится,​ чтобы получить тип integer (в Паскале с этим строго).
 +
 +----
 +
 +**5.** В результате получился вот такой скрипт:​
 +
 +<code delphi>
 +var
 +  Y: integer;
 +  SX, SY: string;
 +
 +begin
 +  Y := round(intpower(2,​GetZ-1)) - 1 - GetY;
 + 
 +  case Y of
 +    0..9: SY := '​00'​+IntToStr(Y);​
 +    10..99: SY := '​0'​+IntToStr(Y);​
 +    100..999: SY := IntToStr(Y);​
 +  end;
 +
 +  case GetX of
 +    0..9: SX := '​00'​+IntToStr(GetX);​
 +    10..99: SX := '​0'​+IntToStr(GetX);​
 +    100..999: SX := IntToStr(GetX);​
 +  end;
 +
 +  if ((GetZ <= 10) and (GetZ >= 4)) then
 +    ResultURL:​=GetURLBase+'​0'​+IntToStr(GetZ-4)+'/​000/​000/'​+SX+'/​000/​000/'​+SY+'​.jpeg';​
 +end.
 +</​code>​
 +
 +Кроме добавления нулей, пришлось сделать GetZ-4 вместо GetZ-3, т.к. правая часть карты на некоторых зумах не помещалась.
 +Так что теперь работает на зумах от 4 до 10, карта находится в левом нижнем углу.
 +
 +Т.к. это попытка сделать образцово-показательный код, добавил туда [[как скачивать нужные масштабы и не скачивать ненужные|ограничение зума]]:
 +
 +<code delphi>
 +if ((GetZ <= 10) and (GetZ >= 4))
 +</​code>​
 +
 +Обычно этого никто не делает (лень), а зря. Теперь при неправильном зуме SAS.Планета не будет слать на сервер дурацких запросов,​ не будет выводить на экран ошибки и сохранять в кэше ненужные tne.
 +
 +----
 +
 +**6.** Последние штрихи.
 +Можно добавить **info.txt**,​ его содержимое будет видно при правом клике на карту - Map Info.
 +Надо пользоваться тэгами html.
 +Например,​ так:
 +
 +<code html>
 +<a href="​http://​malmo.se/​karta">​http://​malmo.se/​karta</​a>​
 +<br>
 +Спутниковый снимок города Мальмё.
 +<br>
 +Работает на зумах от 4 до 10, карта находится в левом нижнем углу.
 +</​code>​
 +
 +Можно изменить иконки **18.bmp** и **24.bmp**, их видно в меню и в тулбаре,​ соответственно.
 +Например,​ взять этот логотип и уменьшить его до нужного размера графическим редактором.
 +
 +{{:​malmo-stad-logo.png|}}
 +
 +Как написано в главе [[zmp|Описание формата пользовательских карт zmp]], цвет фона - (255, 0, 255). То есть пурпурный цвет обозначает прозрачность иконки. <​del>​К сожалению,​ сейчас поддерживаются иконки только в формате bmp, размер только 18х18 и 24х24.</​del>​ В последних версиях программы логотип уменьшать не обязательно,​ достаточно переименовать в 24.bmp (а 18.bmp удалить).
 +
 +
 +Можно подправить в **params.txt** параметры pnum и separator, чтобы изменить положение карты в меню.
 +Чтобы увидеть изменения,​ надо закрыть САС, удалить (переименовать) Maps\maps.ini и снова запустить. Я, пожалуй,​ оба оставлю пустыми (нулевыми).
 +
 +И вот результат!
 +{{:​malmo.se.sat.zmp.zip|}}