SASGIS - SAS.Планета
View Issue Details
0003610SAS.Планета[All Projects] Хотелкаpublic22-01-2020 15:4820-02-2021 23:14
zed 
zed 
normalminorhave not tried
resolvedfixed 
191221 
200606200606 
0003610: PascalScript: Добавить функцию получения Url из шаблона
В свежем PR#27 пришли zmp со вспомогательным скриптом, реализующем логику получения url из шаблона:

Someone wrote


Этот скрипт призван упростить добавление новых карт в SasPlanet.
Он избавит начинающих пользователей от необходимости программировать на Pascal,
чтобы вносить изменения в файл GetUrlScript.txt при добавлении каждой новой карты.

Теперь можно просто вставлять привычный URL с заглушками типа {x}, {y}, {z}
в поле DefURLBase из файла params.txt. На пример, так:

DefURLBase=http://{s:a,b,c}.tile.openstreetmap.org/{z}/{x}/{y}.png

Скрипт разрабатывали Nnngrach и Erelen

--- Список доступных параметров для автозамены:

{x} Номер тайла по оси X. (Как в картах OpenStreetMaps)
{y} Номер тайла по оси Y. (Как в картах OpenStreetMaps)
{z} Уровень приближения/зума. (Как в картах OpenStreetMaps)
{q} Номер тайла в системе QuadKey. (Как в картах Bing)
{-y} Инвертированный номер тайла по оси Y. (Как на сайте Nakarte)
{bbox} Координаты границ тайла. (Для WMS серверов)
{timeStamp} Текущее время в формате UnixTime. (Для карт с пробками)
{z+1} Уровень зума. (Для карт, хранящихся в формате SasPlanet)
{x/1024} Номер первой подпапки (Для карт, в формате SasPlanet)
{y/1024} Номер второй подпапки (Для карт, в формате SasPlanet)
{s:a,b,c} Буква или цифра с номером зеркала сервера.
             В данном случае - одна из букв (A,B,C), выбранная рандомно.

Предлагаю добавить в SAS некую функцию "TemplateToUrl" которая будет выполнять все нужные замены и избавит от необходимости таскать этот скрипт в каждом zmp.
No tags attached.
related to 0003669resolved zed В функцию создания url из шаблона, добавить плейсхолдер {sas_path} 
txt GetUrlScript.txt (7,315) 22-01-2020 15:49
http://www.sasgis.org/mantis/file_download.php?file_id=2416&type=bug
Issue History
22-01-2020 15:48zedNew Issue
22-01-2020 15:49zedFile Added: GetUrlScript.txt
22-01-2020 15:50zedDescription Updatedbug_revision_view_page.php?rev_id=7596#r7596
22-01-2020 15:55zedDescription Updatedbug_revision_view_page.php?rev_id=7597#r7597
22-01-2020 17:35vdemidovNote Added: 0019632
22-01-2020 17:40zedNote Added: 0019633
22-01-2020 17:57vdemidovNote Added: 0019634
22-01-2020 21:22nnngrachNote Added: 0019635
25-01-2020 12:28zedAssigned To => zed
25-01-2020 12:28zedStatusnew => assigned
25-01-2020 12:28zedTarget Version => 211230
26-01-2020 09:49zedNote Added: 0019636
26-01-2020 11:15zedNote Added: 0019637
31-01-2020 15:13nnngrachNote Added: 0019638
31-01-2020 15:14nnngrachNote Edited: 0019638bug_revision_view_page.php?bugnote_id=19638#r7599
01-02-2020 06:07zedStatusassigned => resolved
01-02-2020 06:07zedFixed in Version => 211230
01-02-2020 06:07zedResolutionopen => fixed
06-05-2020 06:44zedRelationship addedrelated to 0003669
01-06-2020 16:44zedTarget Version211230 => 200606
01-06-2020 16:44zedFixed in Version211230 => 200606

Notes
(0019632)
vdemidov   
22-01-2020 17:35   
А я бы предложил подумать о том, что бы сделать по какому-то ключу в params.txt создание другого урл-генератора чисто по такому шаблону. Вообще без запуска PascalScript.
(0019633)
zed   
22-01-2020 17:40   
Да, я думаю что можно сделать так, что если файла GetUrlScript нету вообще, то генерировать url из этого шаблона. А если файл есть, то просто предоставлять такую функцию (мало ли нужно куки какие обновлять или ещё что).

В коде это будет жить всё в одном месте, но будет заложено вот такое вариативное поведение.
(0019634)
vdemidov   
22-01-2020 17:57   
Нормальный вариант. Главное хорошо и непротиворечиво плейсхолдеры продумать. Еще версия нужна и текущий язык (на всякий случай)
(0019635)
nnngrach   
22-01-2020 21:22   
Первые 5 плейсхолдеров (x y z q -y bbox) я брал из LeafLet: по моим наблюдениям, чаще всего используется именно такое написание. Думаю, их лучше оставить как есть.

Следующие 4 придумывал сам (timeStamp, z+1, x/1024, y/1024). Если нужно, то можно переименовывать, если есть идеи, на что именно.

Насчет последнего плейсходера {s:a,b,c}. Я думаю, гораздо удобней и привычней будет использовать вместо него стандартный ЛифЛетовский плейсхолдер {s}. А для ввода значений просто добавить новое поле в Params.txt. Например, такое:

ServerNames=a,b,c
(0019636)
zed   
26-01-2020 09:49   
С переменной для языка возник вопрос. В запросах обычно фигурирует такой формат: "en_US", "ru_RU", а у нас же в переменной просто "en" или "ru". Надо делать какое-то сопоставление или что?
(0019637)
zed   
26-01-2020 11:15   
Закончил, можно тестировать.

В скрипты добавлена функция

function TemplateToUrl(const ATmpl: string): string;

которая из шаблона генерирует url. Если файла GetUrlScript.txt нету или он пуст (в том числе не содержит ни пробелов, ни переводов строк), происходит автоматическое генерирование url, так, как-будто выполняется вот такой скрипт:

begin
  ResultUrl := TemplateToUrl(GetURLBase);
end.


В качестве параметров для замены доступны все параметры из описания тикета, плюс 2 параметра {lang} и {ver} (язык и версия, соответственно).

Если нужны ещё какие-то параметры, пишите - добавлю.

nnngrach
В комментариях к скрипту я вижу вы столкнулись с тем, что некоторые функции не работают или работают не так как надо - не плохо бы открыть соответствующие тикеты по этому поводу, возможно это можно как-то починить.
(0019638)
nnngrach   
31-01-2020 15:13   
(edited on: 31-01-2020 15:14)
Работает, спасибо!

Надо теперь не забыть в Wiki про новые теги написать.