SASGIS

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

SAS.Wiki

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

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

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


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

Различия

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

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

простой_пример [13/02/2012 10:56]
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
  
  
Строка 101: Строка 104:
  
 В САСе зумы считаются от 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-значными.
Строка 113: Строка 120:
  
 Берём 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.Планету.
Строка 140: Строка 149:
 **4.** Для того, чтобы перевернуть карту, надо написать так: **4.** Для того, чтобы перевернуть карту, надо написать так:
  
-Код: Выделить всё +  ​Y := round(intpower(2,​GetZ-1)) - 1 - GetY
-    ​Y := round(intpower(2,​GetZ-1)) - 1 - GetY+
  
 +''​2^(Z-1)''​ - это число тайлов по каждой координате для зума Z. Использовать round приходится,​ чтобы получить тип integer (в Паскале с этим строго).
  
 +----
  
-2^(Z-1) - это число тайлов по каждой координате для ​зума Z. Использовать round приходится, чтобы получить тип integer (в Паскале с этим строго). +**5.** В результате получился вот такой ​скрипт:
- +
-----+
  
-**5.** В результате сваял вот такой скрипт:+<code delphi>​ 
 +var 
 +  Yinteger; 
 +  SX, SY: string;
  
-    var +begin 
-      Y: integer; +  Y := round(intpower(2,​GetZ-1)) - 1 - GetY; 
-      SX, SY: string; +  
-     +  case Y of 
-    ​begin +    0..9: SY := '​00'​+IntToStr(Y);​ 
-      Y := round(intpower(2,​GetZ-1)) - 1 - GetY; +    10..99: SY := '​0'​+IntToStr(Y);​ 
-     ​ +    100..999: SY := IntToStr(Y);​ 
-      case Y of +  end;
-        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.+
  
 +  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, т.к. правая часть карты не помещалась.+Кроме добавления нулей, пришлось сделать GetZ-4 вместо GetZ-3, т.к. правая часть карты ​на некоторых зумах ​не помещалась.
 Так что теперь работает на зумах от 4 до 10, карта находится в левом нижнем углу. Так что теперь работает на зумах от 4 до 10, карта находится в левом нижнем углу.
  
-Т.к. это попытка сделать образцово-показательный код, добавил туда ​+Т.к. это попытка сделать образцово-показательный код, добавил туда ​[[как скачивать нужные масштабы и не скачивать ненужные|ограничение зума]]:​ 
 + 
 +<code delphi>​ 
 +if ((GetZ <= 10) and (GetZ >= 4)) 
 +</​code>​
  
-    if ((GetZ <= 10) and (GetZ >= 4)) 
-    ​ 
 Обычно этого никто не делает (лень), а зря. Теперь при неправильном зуме SAS.Планета не будет слать на сервер дурацких запросов,​ не будет выводить на экран ошибки и сохранять в кэше ненужные tne. Обычно этого никто не делает (лень), а зря. Теперь при неправильном зуме SAS.Планета не будет слать на сервер дурацких запросов,​ не будет выводить на экран ошибки и сохранять в кэше ненужные tne.
  
Строка 192: Строка 200:
 Например,​ так: Например,​ так:
  
 +<code html>
 +<a href="​http://​malmo.se/​karta">​http://​malmo.se/​karta</​a>​
 +<br>
 +Спутниковый снимок города Мальмё.
 +<br>
 +Работает на зумах от 4 до 10, карта находится в левом нижнем углу.
 +</​code>​
  
-    <a href="​http://​malmo.se/​karta">​http://​malmo.se/​karta</​a>​ +Можно изменить иконки ​**18.bmp** и **24.bmp**, их видно в меню и в тулбаре,​ соответственно.
-    <​br>​ +
-    Спутниковый снимок города Мальмо. +
-    <​br>​ +
-    Работает на зумах от 4 до 10, карта находится в левом нижнем углу. +
- +
- +
- +
-Можно изменить иконки 18.bmp и 24.bmp, их видно в меню и в тулбаре,​ соответственно.+
 Например,​ взять этот логотип и уменьшить его до нужного размера графическим редактором. Например,​ взять этот логотип и уменьшить его до нужного размера графическим редактором.
  
 {{:​malmo-stad-logo.png|}} {{:​malmo-stad-logo.png|}}
  
-Как написано в главе [[описания_формата_пользовательских_карт_zmp|Описание формата пользовательских карт zmp]], цвет фона - (255, 0, 255). То есть пурпурный цвет обозначает прозрачность иконки. К сожалению,​ сейчас поддерживаются иконки только в формате bmp, размер только 18х18 и 24х24.+Как написано в главе [[zmp|Описание формата пользовательских карт zmp]], цвет фона - (255, 0, 255). То есть пурпурный цвет обозначает прозрачность иконки. ​<del>К сожалению,​ сейчас поддерживаются иконки только в формате bmp, размер только 18х18 и 24х24.</​del>​ В последних версиях программы логотип уменьшать не обязательно,​ достаточно переименовать в 24.bmp (а 18.bmp удалить).
  
  
 Можно подправить в **params.txt** параметры pnum и separator, чтобы изменить положение карты в меню. Можно подправить в **params.txt** параметры pnum и separator, чтобы изменить положение карты в меню.
-Чтобы увидеть изменения,​ надо закрыть САС, удалить Maps\maps.ini и снова запустить. Я, пожалуй,​ оба оставлю пустыми (нулевыми).+Чтобы увидеть изменения,​ надо закрыть САС, удалить ​(переименовать) ​Maps\maps.ini и снова запустить. Я, пожалуй,​ оба оставлю пустыми (нулевыми).
  
 И вот результат! И вот результат!
 {{:​malmo.se.sat.zmp.zip|}} {{:​malmo.se.sat.zmp.zip|}}