SASGIS

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

Как отследить запрос и создать свой zmp?

Модератор: Tolik

Re: Как отследить запрос и создать свой zmp?

Сообщение Tolik » 10 фев 2012, 11:07

4. Для того, чтобы перевернуть карту, надо написать так:
Код: Выделить всё
Y := round(intpower(2,GetZ-1)) - 1 - GetY


2^(Z-1) - это число тайлов по каждой координате для зума Z. Использовать round приходится, чтобы получить тип integer (в Паскале с этим строго).

Кто-нибудь подскажет функцию, как преобразовать целое число в 3-значную строку? Неохота использовать if.
А я пока поработаю немного :)
Tolik
Гуру
 
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 280 раз.
Поблагодарили: 587 раз.

Re: Как отследить запрос и создать свой zmp?

Сообщение Tolik » 10 фев 2012, 11:08

garl писал(а):а ещё нужно учесть что
Код: Выделить всё
'/000/000/'+IntToStr(GetY)

будет верно лишь для значений до 999, а выше придётся мудрить.

Конечно. Я уже проверил, на этой карте координаты меньше 999 (маленький город).

А макс. зум - 06.
Tolik
Гуру
 
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 280 раз.
Поблагодарили: 587 раз.

Re: Как отследить запрос и создать свой zmp?

Сообщение Tolik » 10 фев 2012, 13:41

5. В результате сваял вот такой скрипт:
Код: Выделить всё
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.


Кроме добавления нулей, пришлось сделать GetZ-4 вместо GetZ-3, т.к. правая часть карты не помещалась.
Так что теперь работает на зумах от 4 до 10, карта находится в левом нижнем углу.

Т.к. это попытка сделать образцово-показательный код, добавил туда "if ((GetZ <= 10) and (GetZ >= 4))", но обычно этого никто не делает (лень). Теперь при неправильном зуме САС не будет слать на сервер дурацких запросов, не будет выводить на экран ошибки и сохранять в кэше ненужные tne.
Последний раз редактировалось Tolik 10 фев 2012, 14:06, всего редактировалось 1 раз.
Tolik
Гуру
 
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 280 раз.
Поблагодарили: 587 раз.

Re: Как отследить запрос и создать свой zmp?

Сообщение Tolik » 10 фев 2012, 13:51

6. Последние штрихи.
Можно добавить info.txt, его содержимое будет видно при правом клике на карту - Map Info.
Надо пользоваться тэгами html.
Например, так:
Код: Выделить всё
<a href="http://malmo.se/karta">http://malmo.se/karta</a>
<br>
Спутниковый снимок города Мальмо.
<br>
Работает на зумах от 4 до 10, карта находится в левом нижнем углу.


Можно изменить иконки 18.bmp и 24.bmp, их видно в меню и в тулбаре, соответственно.
Например, взять этот логотип и уменьшить его до нужного размера графическим редактором.
Изображение
Я что-то не помню, какой цвет означает прозрачность, обычно обхожусь без неё.

Можно подправить параметры pnum и separator, чтобы изменить положение карты в меню.
Чтобы увидеть изменения, надо закрыть САС, удалить Maps\maps.ini и снова запустить. Я, пожалуй, оба оставлю пустыми (нулевыми).

И вот результат!
malmo.se.sat.zmp.zip
(3.83 KiB) Скачиваний: 193

Жду комментариев.

P.S. Как написано в Викимапии, цвет фона - (255, 0, 255). То есть пурпурный цвет обозначает прозрачность иконки. К сожалению, сейчас поддерживаются иконки только в формате bmp, размер только 18х18 и 24х24.
Последний раз редактировалось Tolik 11 фев 2012, 10:19, всего редактировалось 1 раз.

За это сообщение автора Tolik поблагодарили: 3
igel72 (11 фев 2012, 10:04) • jaroshsv (10 фев 2012, 14:44) • Papazol (11 фев 2012, 10:56)
Рейтинг: 15.79%
 
Tolik
Гуру
 
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 280 раз.
Поблагодарили: 587 раз.

Re: Как отследить запрос и создать свой zmp?

Сообщение jaroshsv » 10 фев 2012, 14:43

Отличный обзорчик. Спасибо.

ПС: почему-то при переходе с 5 на 6 зум идет смещение.
Последний раз редактировалось jaroshsv 10 фев 2012, 15:04, всего редактировалось 1 раз.
jaroshsv
Новичок
 
Сообщения: 1
Зарегистрирован: 20 ноя 2009, 14:21
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

Re: Как отследить запрос и создать свой zmp?

Сообщение Tolik » 10 фев 2012, 14:46

В качестве следующего упражнения можно сделать слой Idrottsplatser из той же карты.
Слово просто понравилось :D Находится в меню Idrott & fritid :)
Означает всего лишь спортплощадки.
Тайлы для этого слоя выглядят так:
Код: Выделить всё
http://xyz.malmo.se/ArcGIS/services/malmo_poi_fritid/MapServer/WMSServer?LAYERS=3&FORMAT=image%2Fpng&TRANSPARENT=true&SRS=EPSG%3A3008&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&BBOX=121109.031744,6161713.354496,122463.701056,6163068.023808&WIDTH=256&HEIGHT=256

Здесь изменяемая часть - BBOX, т.е. bounding box - координаты границ тайла в метрах от начала координат.
Но вот тут-то и засада. Система координат, как видно в этом же урле, EPSG:3008. Шведская :(

BBOX используется часто, например, в карте teleatlas, но работает в другой системе координат.
Код: Выделить всё
begin
ResultURL:=GetURLBase+RoundEx(GetLMetr,8)+','+RoundEx(GetBMetr,8)+','+RoundEx(GetRMetr,8)+','+RoundEx(GetTMetr,8);
end.

Так что написать правильный скрипт совсем не просто.

Чтобы слой стал слоем, надо в params.txt сделать asLayer=1. Также надо поменять jpeg на png.
Tolik
Гуру
 
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 280 раз.
Поблагодарили: 587 раз.

Re: Как отследить запрос и создать свой zmp?

Сообщение zed » 10 фев 2012, 15:08

Tolik, а продублируйте свой мануал в wiki?
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Как отследить запрос и создать свой zmp?

Сообщение Tolik » 10 фев 2012, 15:09

jaroshsv писал(а):почему-то при переходе с 5 на 6 зум идет смещение.

Да, это типичная проблема карт без привязки.
Решить непросто или невозможно.
Можно, например, добавить в скрипт смещение (подобрать вручную цифры для каждого зума), но будет всё равно съезжать.

Решить кардинально можно, имхо, только если ввести поддержку шведской СК (и ещё миллиона других).
Tolik
Гуру
 
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 280 раз.
Поблагодарили: 587 раз.

Re: Как отследить запрос и создать свой zmp?

Сообщение Tolik » 10 фев 2012, 15:15

zed писал(а):Tolik, а продублируйте свой мануал в wiki?

Ок.
Прям как есть?
Куда добавить страницу и как?
Tolik
Гуру
 
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 280 раз.
Поблагодарили: 587 раз.

Re: Как отследить запрос и создать свой zmp?

Сообщение zed » 10 фев 2012, 15:45

Tolik писал(а):
zed писал(а):Tolik, а продублируйте свой мануал в wiki?

Ок.
Прям как есть?
Куда добавить страницу и как?

На своё усмотрение :)
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Пред.След.

Вернуться в Другие сервисы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3