Страница 2 из 4

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

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


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

Кто-нибудь подскажет функцию, как преобразовать целое число в 3-значную строку? Неохота использовать if.
А я пока поработаю немного :)

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

СообщениеДобавлено: 10 фев 2012, 11:08
Tolik
garl писал(а):а ещё нужно учесть что
Код: Выделить всё
'/000/000/'+IntToStr(GetY)

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

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

А макс. зум - 06.

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

СообщениеДобавлено: 10 фев 2012, 13:41
Tolik
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.

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

СообщениеДобавлено: 10 фев 2012, 13:51
Tolik
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) Скачиваний: 155

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

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

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

СообщениеДобавлено: 10 фев 2012, 14:43
jaroshsv
Отличный обзорчик. Спасибо.

ПС: почему-то при переходе с 5 на 6 зум идет смещение.

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

СообщениеДобавлено: 10 фев 2012, 14:46
Tolik
В качестве следующего упражнения можно сделать слой 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.

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

СообщениеДобавлено: 10 фев 2012, 15:08
zed
Tolik, а продублируйте свой мануал в wiki?

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

СообщениеДобавлено: 10 фев 2012, 15:09
Tolik
jaroshsv писал(а):почему-то при переходе с 5 на 6 зум идет смещение.

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

Решить кардинально можно, имхо, только если ввести поддержку шведской СК (и ещё миллиона других).

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

СообщениеДобавлено: 10 фев 2012, 15:15
Tolik
zed писал(а):Tolik, а продублируйте свой мануал в wiki?

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

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

СообщениеДобавлено: 10 фев 2012, 15:45
zed
Tolik писал(а):
zed писал(а):Tolik, а продублируйте свой мануал в wiki?

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

На своё усмотрение :)