From 2fdca730cd97d1caf2e6d0105f005aa5dae7da23 Mon Sep 17 00:00:00 2001 From: sasbot <> Date: Sat, 6 Jun 2020 12:00:00 +0000 Subject: [PATCH] update zmp --- .../params.txt | 8 +- .../params.txt | 8 +- _OSM/osm_gps_tile.zmp/params.txt | 10 +- _OSM/osm_opensnowmap_overlay.zmp/params.txt | 6 +- .../18.bmp | Bin .../24.bmp | Bin anygis/Tracks_Strava_All.zmp/GetUrlScript.txt | 216 ++++++++++++++++++ anygis/Tracks_Strava_All.zmp/info.txt | 7 + anygis/Tracks_Strava_All.zmp/params.txt | 19 ++ .../18.bmp | Bin .../24.bmp | Bin .../Tracks_Strava_Ride.zmp/GetUrlScript.txt | 216 ++++++++++++++++++ anygis/Tracks_Strava_Ride.zmp/info.txt | 7 + anygis/Tracks_Strava_Ride.zmp/params.txt | 19 ++ anygis/Tracks_Strava_Run.zmp/18.bmp | Bin 0 -> 1062 bytes anygis/Tracks_Strava_Run.zmp/24.bmp | Bin 0 -> 1782 bytes anygis/Tracks_Strava_Run.zmp/GetUrlScript.txt | 216 ++++++++++++++++++ anygis/Tracks_Strava_Run.zmp/info.txt | 7 + anygis/Tracks_Strava_Run.zmp/params.txt | 19 ++ anygis/Tracks_Strava_RunAndRide.zmp/18.bmp | Bin 0 -> 1062 bytes anygis/Tracks_Strava_RunAndRide.zmp/24.bmp | Bin 0 -> 1782 bytes .../GetUrlScript.txt | 216 ++++++++++++++++++ anygis/Tracks_Strava_RunAndRide.zmp/info.txt | 7 + .../Tracks_Strava_RunAndRide.zmp/params.txt | 19 ++ anygis/Tracks_Strava_Water.zmp/18.bmp | Bin 0 -> 1062 bytes anygis/Tracks_Strava_Water.zmp/24.bmp | Bin 0 -> 1782 bytes .../Tracks_Strava_Water.zmp/GetUrlScript.txt | 216 ++++++++++++++++++ anygis/Tracks_Strava_Water.zmp/info.txt | 7 + anygis/Tracks_Strava_Water.zmp/params.txt | 19 ++ anygis/Tracks_Strava_Winter.zmp/18.bmp | Bin 0 -> 1062 bytes anygis/Tracks_Strava_Winter.zmp/24.bmp | Bin 0 -> 1782 bytes .../Tracks_Strava_Winter.zmp/GetUrlScript.txt | 216 ++++++++++++++++++ anygis/Tracks_Strava_Winter.zmp/info.txt | 7 + anygis/Tracks_Strava_Winter.zmp/params.txt | 19 ++ anygis/rusOurdoor.zmp/GetUrlScript.txt | 3 - anygis/rusOurdoor.zmp/params.txt | 15 -- anygis/rusOurdoor_lite.zmp/GetUrlScript.txt | 3 - anygis/rusOurdoor_lite.zmp/params.txt | 15 -- 38 files changed, 1472 insertions(+), 48 deletions(-) rename anygis/{rusOurdoor.zmp => Tracks_Strava_All.zmp}/18.bmp (100%) rename anygis/{rusOurdoor.zmp => Tracks_Strava_All.zmp}/24.bmp (100%) create mode 100755 anygis/Tracks_Strava_All.zmp/GetUrlScript.txt create mode 100644 anygis/Tracks_Strava_All.zmp/info.txt create mode 100644 anygis/Tracks_Strava_All.zmp/params.txt rename anygis/{rusOurdoor_lite.zmp => Tracks_Strava_Ride.zmp}/18.bmp (100%) rename anygis/{rusOurdoor_lite.zmp => Tracks_Strava_Ride.zmp}/24.bmp (100%) create mode 100755 anygis/Tracks_Strava_Ride.zmp/GetUrlScript.txt create mode 100644 anygis/Tracks_Strava_Ride.zmp/info.txt create mode 100644 anygis/Tracks_Strava_Ride.zmp/params.txt create mode 100644 anygis/Tracks_Strava_Run.zmp/18.bmp create mode 100644 anygis/Tracks_Strava_Run.zmp/24.bmp create mode 100755 anygis/Tracks_Strava_Run.zmp/GetUrlScript.txt create mode 100644 anygis/Tracks_Strava_Run.zmp/info.txt create mode 100644 anygis/Tracks_Strava_Run.zmp/params.txt create mode 100644 anygis/Tracks_Strava_RunAndRide.zmp/18.bmp create mode 100644 anygis/Tracks_Strava_RunAndRide.zmp/24.bmp create mode 100755 anygis/Tracks_Strava_RunAndRide.zmp/GetUrlScript.txt create mode 100644 anygis/Tracks_Strava_RunAndRide.zmp/info.txt create mode 100644 anygis/Tracks_Strava_RunAndRide.zmp/params.txt create mode 100644 anygis/Tracks_Strava_Water.zmp/18.bmp create mode 100644 anygis/Tracks_Strava_Water.zmp/24.bmp create mode 100755 anygis/Tracks_Strava_Water.zmp/GetUrlScript.txt create mode 100644 anygis/Tracks_Strava_Water.zmp/info.txt create mode 100644 anygis/Tracks_Strava_Water.zmp/params.txt create mode 100644 anygis/Tracks_Strava_Winter.zmp/18.bmp create mode 100644 anygis/Tracks_Strava_Winter.zmp/24.bmp create mode 100755 anygis/Tracks_Strava_Winter.zmp/GetUrlScript.txt create mode 100644 anygis/Tracks_Strava_Winter.zmp/info.txt create mode 100644 anygis/Tracks_Strava_Winter.zmp/params.txt delete mode 100644 anygis/rusOurdoor.zmp/GetUrlScript.txt delete mode 100644 anygis/rusOurdoor.zmp/params.txt delete mode 100644 anygis/rusOurdoor_lite.zmp/GetUrlScript.txt delete mode 100644 anygis/rusOurdoor_lite.zmp/params.txt diff --git a/_OSM/osm_WayMarkeredTrails_Cycling.zmp/params.txt b/_OSM/osm_WayMarkeredTrails_Cycling.zmp/params.txt index f5762e0b..d6dfa108 100644 --- a/_OSM/osm_WayMarkeredTrails_Cycling.zmp/params.txt +++ b/_OSM/osm_WayMarkeredTrails_Cycling.zmp/params.txt @@ -1,7 +1,10 @@ [PARAMS] -GUID={1123ADB1-4561-4280-9224-D4690321117E} -asLayer=1 +GUID={1123ADB1-4561-4280-9224-D4690321117E} +ParentSubMenu_ru=Маршруты и GPS-Треки +ParentSubMenu_uk=Маршруты и GPS-Треки +ParentSubMenu=Ways and GPS-Tracks name=WayMarkeredTrails Cycling +asLayer=1 NameInCache=waymarkedtrails_cycling DefURLBase=https://tile.waymarkedtrails.org/cycling ContentType=image/png @@ -10,6 +13,5 @@ projection=1 sradiusa=6378137 sradiusb=6378137 DefHotKey=16463 -PARENTSUBMENU=Tracks RequestHead=Referer: http://www.openstreetmap.org/ diff --git a/_OSM/osm_WayMarkeredTrails_Hiking.zmp/params.txt b/_OSM/osm_WayMarkeredTrails_Hiking.zmp/params.txt index 1146c041..b914c1a6 100644 --- a/_OSM/osm_WayMarkeredTrails_Hiking.zmp/params.txt +++ b/_OSM/osm_WayMarkeredTrails_Hiking.zmp/params.txt @@ -1,7 +1,10 @@ [PARAMS] -GUID={1123ADB1-4561-4280-9225-D4690321117E} -asLayer=1 +GUID={1123ADB1-4561-4280-9225-D4690321117E} +ParentSubMenu_ru=Маршруты и GPS-Треки +ParentSubMenu_uk=Маршруты и GPS-Треки +ParentSubMenu=Ways and GPS-Tracks name=WayMarkeredTrails iking +asLayer=1 NameInCache=waymarkedtrails_hiking DefURLBase=https://tile.waymarkedtrails.org/hiking ContentType=image/png @@ -10,6 +13,5 @@ projection=1 sradiusa=6378137 sradiusb=6378137 DefHotKey=16463 -PARENTSUBMENU=Tracks RequestHead=Referer: http://www.openstreetmap.org/ diff --git a/_OSM/osm_gps_tile.zmp/params.txt b/_OSM/osm_gps_tile.zmp/params.txt index 21577389..d97f37fb 100644 --- a/_OSM/osm_gps_tile.zmp/params.txt +++ b/_OSM/osm_gps_tile.zmp/params.txt @@ -1,9 +1,12 @@ [PARAMS] -GUID={1123ADB1-4561-4280-9222-D4690321117E} -asLayer=1 +GUID={1123ADB1-4561-4280-9222-D4690321117E} +ParentSubMenu_ru=Маршруты и GPS-Треки +ParentSubMenu_uk=Маршруты и GPS-Треки +ParentSubMenu=Ways and GPS-Tracks name_ru=Карта GPS-треков OSM name=Map GPS-track OSM -name_uk=Карта GPS-треков OSM +name_uk=Карта GPS-треков OSM +asLayer=1 NameInCache=osm_gps_tile DefURLBase=http://b.gps-tile.openstreetmap.org/lines ContentType=image/png @@ -12,7 +15,6 @@ projection=1 sradiusa=6378137 sradiusb=6356752 DefHotKey=16463 -PARENTSUBMENU=Tracks IteratorSubRectSize=8,8 RequestHead=Referer: http://www.openstreetmap.org/ License=(c) OpenStreetMap contributors, CC-BY-SA diff --git a/_OSM/osm_opensnowmap_overlay.zmp/params.txt b/_OSM/osm_opensnowmap_overlay.zmp/params.txt index 4692568e..c3e38916 100644 --- a/_OSM/osm_opensnowmap_overlay.zmp/params.txt +++ b/_OSM/osm_opensnowmap_overlay.zmp/params.txt @@ -1,7 +1,10 @@ [PARAMS] GUID={1123ADB1-4562-4280-9222-D4690321117E} +ParentSubMenu_ru=Маршруты и GPS-Треки +ParentSubMenu_uk=Маршруты и GPS-Треки +ParentSubMenu=Ways and GPS-Tracks +name=OpenSnowMap (pistes layer) asLayer=1 -name=OpenSnowMap (pistes layer) NameInCache=opensnowmap_overlay DefURLBase=http://www.opensnowmap.org/pistes ContentType=image/png @@ -10,7 +13,6 @@ projection=1 sradiusa=6378137 sradiusb=6378137 DefHotKey=16463 -PARENTSUBMENU=Tracks IteratorSubRectSize=8,8 RequestHead=Referer: http://www.opensnowmap.org/ diff --git a/anygis/rusOurdoor.zmp/18.bmp b/anygis/Tracks_Strava_All.zmp/18.bmp similarity index 100% rename from anygis/rusOurdoor.zmp/18.bmp rename to anygis/Tracks_Strava_All.zmp/18.bmp diff --git a/anygis/rusOurdoor.zmp/24.bmp b/anygis/Tracks_Strava_All.zmp/24.bmp similarity index 100% rename from anygis/rusOurdoor.zmp/24.bmp rename to anygis/Tracks_Strava_All.zmp/24.bmp diff --git a/anygis/Tracks_Strava_All.zmp/GetUrlScript.txt b/anygis/Tracks_Strava_All.zmp/GetUrlScript.txt new file mode 100755 index 00000000..73a86cec --- /dev/null +++ b/anygis/Tracks_Strava_All.zmp/GetUrlScript.txt @@ -0,0 +1,216 @@ +// ----------------------------------------------------------------------------- +// --- Универсальный адаптер от AnyGIS +// ----------------------------------------------------------------------------- + +// Этот скрипт призван упростить добавление новых карт в 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), выбранная рандомно. + + + +// Совет для начинающих: если хотите разобраться в этом коде, +// то удобнее всего читать его с конца. + +// Еще один совет: если будете писать свои скрипты, +// то вывод в консоль (а точнее, в окно Debug Output ) делается так: +// +// writeLn('Hello Sas.Planet!'); + + + + + + + + +// ----------------------------------------------------------------------------- +// --- 4. Вспомогательные функции +// ----------------------------------------------------------------------------- + +// --- Проверить, содержит ли одна строка другую? +function isContains(findingText: string; inSourceText: string) : boolean; +begin + result := pos(findingText, inSourceText) <> 0; +end; + + +// --- Округление до нужного количества знаков после запятой +// --- (стандартные функции округления у меня почему-то не заработали) +function roundFor(sourceNumber: Double ; digitAfterComma: integer) : string; +var + intPart, floatPart : integer; +begin + intPart := floor(sourceNumber); + floatPart := floor( (sourceNumber - intPart) * round(intPower(10, digitAfterComma)) ) + result := intToStr(intPart) + '.' + intToStr(floatPart) +end; + + +// --- Вычислить номер тайла в системе Quadkey (используется в картах Bing) +function getQuadkeyText(x: integer; y: integer; z: integer) : string; +var + i, q : byte; +begin + result:=''; + for i:=1 to z do begin + q:=0; + if x mod 2 = 1 then q := q + 1; + if y mod 2 = 1 then q := q + 2; + x := x div 2; + y := y div 2; + result := intToStr(q) + result; + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 3. Если требуется, то подставить имя для зеркала сервера +// --- на место заглушки типа {s: a,b,c} +// ----------------------------------------------------------------------------- +type + TSubst = record + mask, val : string; + end; + TSubsts = record + count : integer; + s : array [0..15] of TSubst; + end; + + +function replaceServerName(url: string) : string; +var + s, ss : string; + sarr : array [0..9] of string; + sarr_l, p : integer; + +begin + s := RegExprGetMatchSubStr(url, '\{[sS]:([^}]+)\}', 0); + if s <> '' then begin + ss := s; + ss := StringReplace(ss, '{s:', '', [rfIgnoreCase]); + ss := StringReplace(ss, '}', '', [rfIgnoreCase]); + ss := ss + ','; + sarr_l := 0; + while ss <> '' do begin + p := pos(',', ss); + if p = 0 then p := length(ss); + sarr[sarr_l] := copy(ss, 1, p-1); + sarr_l := sarr_l + 1; + delete(ss, 1, p); + end; + url := StringReplace(url, s, sarr[random(sarr_l)], []); + end; + Result := url; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 2. Если требуется, то вычислить и подставить в шаблон URL адреса +// --- нужные значения на место заглушек типа {x}, {y}, {z}. +// ----------------------------------------------------------------------------- +function replaceLeafletPlaceholders(urlTemplate: string; x: integer; y: integer; z: integer) : string; +var + options: tReplaceFlags; + calculatedValue: string; + +begin + options := [rfReplaceAll, rfIgnoreCase]; + result := urlTemplate; + + if isContains('{x}', result) then begin + calculatedValue := intToStr(x); + result := stringReplace( result, '{x}', calculatedValue, options) + end; + + if isContains('{y}', result) then begin + calculatedValue := intToStr(y); + result := stringReplace( result, '{y}', calculatedValue, options) + end; + + if isContains('{z}', result) then begin + calculatedValue := intToStr(z-1); + result := stringReplace( result, '{z}', calculatedValue, options) + end; + + if isContains('{z+1}', result) then begin + calculatedValue := intToStr(z); + result := stringReplace( result, '{z+1}', calculatedValue, options) + end; + + if isContains('{x/1024}', result) then begin + calculatedValue := intToStr(x div 1024); + result := stringReplace( result, '{x/1024}', calculatedValue, options) + end; + + if isContains('{y/1024}', result) then begin + calculatedValue := intToStr(y div 1024); + result := stringReplace( result, '{y/1024}', calculatedValue, options) + end; + + if isContains('{-y}', result) then begin + calculatedValue := intToStr( round(intPower(2, z-1)) - 1 - y); + result := stringReplace( result, '{-y}', calculatedValue, options) + end; + + if isContains('{q}', result) then begin + calculatedValue := getQuadkeyText(x, y, z); + result := stringReplace( result, '{q}', calculatedValue, options) + end; + + if isContains('{bbox}', result) then begin + result := stringReplace( result, '{bbox}', '{Left},{Bottom},{Right},{Top}', options) + result := stringReplace( result, '{Left}', roundFor(GetLMetr,8), options) + result := stringReplace( result, '{Bottom}', roundFor(GetBMetr,8), options) + result := stringReplace( result, '{Right}', roundFor(GetRMetr,8), options) + result := stringReplace( result, '{Top}', roundFor(GetTMetr,8), options) + // Делаю замену в пять операций потому, что при попытке + // сделать все одной строкой возникает ошибка. + // Возможно какое-то ограничение на память. + end; + + if isContains('{timeStamp}', result) then begin + calculatedValue := IntToStr(GetUnixTime); + result := stringReplace( result, '{timeStamp}', calculatedValue, options) + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 1. Старт скрипта. Запустить вычисление URL-адреса тайла. +// --- Скачать тайл по полученному URL. +// ----------------------------------------------------------------------------- +begin + resultURL := replaceLeafletPlaceholders(getURLBase, getX, getY, getZ); + resultURL := replaceServerName(resultURL); +end. diff --git a/anygis/Tracks_Strava_All.zmp/info.txt b/anygis/Tracks_Strava_All.zmp/info.txt new file mode 100644 index 00000000..615f451d --- /dev/null +++ b/anygis/Tracks_Strava_All.zmp/info.txt @@ -0,0 +1,7 @@ +Этот файл был создан автоматически с помощью файло-генератора AnyGIS.ru + +Если вы заметили ошибку, свяжитесь со мной и сообщите о ней: + +https://t.me/anygis +https://vk.com/anygis +anygis@bk.ru \ No newline at end of file diff --git a/anygis/Tracks_Strava_All.zmp/params.txt b/anygis/Tracks_Strava_All.zmp/params.txt new file mode 100644 index 00000000..5d2262f1 --- /dev/null +++ b/anygis/Tracks_Strava_All.zmp/params.txt @@ -0,0 +1,19 @@ +п»ї +[PARAMS] +GUID={7E330845-C966-4B63-B909-5214A016BDB1} +ParentSubMenu_ru=Маршруты Рё GPS-Треки +ParentSubMenu_uk=Маршруты Рё GPS-Треки +ParentSubMenu=Ways and GPS-Tracks +name_ru=Strava Heatmap - Р’СЃРµ слои +name_uk=Strava Heatmap - Р’СЃРµ слои +name=Strava Heatmap - All layers +NameInCache=Tracks_Strava_All +asLayer=1 +projection=1 +sradiusa=6378137 +sradiusb=6378137 +DefURLBase=https://anygis.ru/api/v1/Tracks_Strava_All/{x}/{y}/{z} +RequestHead=Referer:https://www.strava.com/heatmap\r\nConnection: keep-alive\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\r\nAccept: image/webp,image/apng,image/*,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: ru,en-US;q=0.9,en;q=0.8 +ContentType=image/jpeg,image/png +Ext=.png +License= В© Strava diff --git a/anygis/rusOurdoor_lite.zmp/18.bmp b/anygis/Tracks_Strava_Ride.zmp/18.bmp similarity index 100% rename from anygis/rusOurdoor_lite.zmp/18.bmp rename to anygis/Tracks_Strava_Ride.zmp/18.bmp diff --git a/anygis/rusOurdoor_lite.zmp/24.bmp b/anygis/Tracks_Strava_Ride.zmp/24.bmp similarity index 100% rename from anygis/rusOurdoor_lite.zmp/24.bmp rename to anygis/Tracks_Strava_Ride.zmp/24.bmp diff --git a/anygis/Tracks_Strava_Ride.zmp/GetUrlScript.txt b/anygis/Tracks_Strava_Ride.zmp/GetUrlScript.txt new file mode 100755 index 00000000..73a86cec --- /dev/null +++ b/anygis/Tracks_Strava_Ride.zmp/GetUrlScript.txt @@ -0,0 +1,216 @@ +// ----------------------------------------------------------------------------- +// --- Универсальный адаптер от AnyGIS +// ----------------------------------------------------------------------------- + +// Этот скрипт призван упростить добавление новых карт в 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), выбранная рандомно. + + + +// Совет для начинающих: если хотите разобраться в этом коде, +// то удобнее всего читать его с конца. + +// Еще один совет: если будете писать свои скрипты, +// то вывод в консоль (а точнее, в окно Debug Output ) делается так: +// +// writeLn('Hello Sas.Planet!'); + + + + + + + + +// ----------------------------------------------------------------------------- +// --- 4. Вспомогательные функции +// ----------------------------------------------------------------------------- + +// --- Проверить, содержит ли одна строка другую? +function isContains(findingText: string; inSourceText: string) : boolean; +begin + result := pos(findingText, inSourceText) <> 0; +end; + + +// --- Округление до нужного количества знаков после запятой +// --- (стандартные функции округления у меня почему-то не заработали) +function roundFor(sourceNumber: Double ; digitAfterComma: integer) : string; +var + intPart, floatPart : integer; +begin + intPart := floor(sourceNumber); + floatPart := floor( (sourceNumber - intPart) * round(intPower(10, digitAfterComma)) ) + result := intToStr(intPart) + '.' + intToStr(floatPart) +end; + + +// --- Вычислить номер тайла в системе Quadkey (используется в картах Bing) +function getQuadkeyText(x: integer; y: integer; z: integer) : string; +var + i, q : byte; +begin + result:=''; + for i:=1 to z do begin + q:=0; + if x mod 2 = 1 then q := q + 1; + if y mod 2 = 1 then q := q + 2; + x := x div 2; + y := y div 2; + result := intToStr(q) + result; + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 3. Если требуется, то подставить имя для зеркала сервера +// --- на место заглушки типа {s: a,b,c} +// ----------------------------------------------------------------------------- +type + TSubst = record + mask, val : string; + end; + TSubsts = record + count : integer; + s : array [0..15] of TSubst; + end; + + +function replaceServerName(url: string) : string; +var + s, ss : string; + sarr : array [0..9] of string; + sarr_l, p : integer; + +begin + s := RegExprGetMatchSubStr(url, '\{[sS]:([^}]+)\}', 0); + if s <> '' then begin + ss := s; + ss := StringReplace(ss, '{s:', '', [rfIgnoreCase]); + ss := StringReplace(ss, '}', '', [rfIgnoreCase]); + ss := ss + ','; + sarr_l := 0; + while ss <> '' do begin + p := pos(',', ss); + if p = 0 then p := length(ss); + sarr[sarr_l] := copy(ss, 1, p-1); + sarr_l := sarr_l + 1; + delete(ss, 1, p); + end; + url := StringReplace(url, s, sarr[random(sarr_l)], []); + end; + Result := url; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 2. Если требуется, то вычислить и подставить в шаблон URL адреса +// --- нужные значения на место заглушек типа {x}, {y}, {z}. +// ----------------------------------------------------------------------------- +function replaceLeafletPlaceholders(urlTemplate: string; x: integer; y: integer; z: integer) : string; +var + options: tReplaceFlags; + calculatedValue: string; + +begin + options := [rfReplaceAll, rfIgnoreCase]; + result := urlTemplate; + + if isContains('{x}', result) then begin + calculatedValue := intToStr(x); + result := stringReplace( result, '{x}', calculatedValue, options) + end; + + if isContains('{y}', result) then begin + calculatedValue := intToStr(y); + result := stringReplace( result, '{y}', calculatedValue, options) + end; + + if isContains('{z}', result) then begin + calculatedValue := intToStr(z-1); + result := stringReplace( result, '{z}', calculatedValue, options) + end; + + if isContains('{z+1}', result) then begin + calculatedValue := intToStr(z); + result := stringReplace( result, '{z+1}', calculatedValue, options) + end; + + if isContains('{x/1024}', result) then begin + calculatedValue := intToStr(x div 1024); + result := stringReplace( result, '{x/1024}', calculatedValue, options) + end; + + if isContains('{y/1024}', result) then begin + calculatedValue := intToStr(y div 1024); + result := stringReplace( result, '{y/1024}', calculatedValue, options) + end; + + if isContains('{-y}', result) then begin + calculatedValue := intToStr( round(intPower(2, z-1)) - 1 - y); + result := stringReplace( result, '{-y}', calculatedValue, options) + end; + + if isContains('{q}', result) then begin + calculatedValue := getQuadkeyText(x, y, z); + result := stringReplace( result, '{q}', calculatedValue, options) + end; + + if isContains('{bbox}', result) then begin + result := stringReplace( result, '{bbox}', '{Left},{Bottom},{Right},{Top}', options) + result := stringReplace( result, '{Left}', roundFor(GetLMetr,8), options) + result := stringReplace( result, '{Bottom}', roundFor(GetBMetr,8), options) + result := stringReplace( result, '{Right}', roundFor(GetRMetr,8), options) + result := stringReplace( result, '{Top}', roundFor(GetTMetr,8), options) + // Делаю замену в пять операций потому, что при попытке + // сделать все одной строкой возникает ошибка. + // Возможно какое-то ограничение на память. + end; + + if isContains('{timeStamp}', result) then begin + calculatedValue := IntToStr(GetUnixTime); + result := stringReplace( result, '{timeStamp}', calculatedValue, options) + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 1. Старт скрипта. Запустить вычисление URL-адреса тайла. +// --- Скачать тайл по полученному URL. +// ----------------------------------------------------------------------------- +begin + resultURL := replaceLeafletPlaceholders(getURLBase, getX, getY, getZ); + resultURL := replaceServerName(resultURL); +end. diff --git a/anygis/Tracks_Strava_Ride.zmp/info.txt b/anygis/Tracks_Strava_Ride.zmp/info.txt new file mode 100644 index 00000000..615f451d --- /dev/null +++ b/anygis/Tracks_Strava_Ride.zmp/info.txt @@ -0,0 +1,7 @@ +Этот файл был создан автоматически с помощью файло-генератора AnyGIS.ru + +Если вы заметили ошибку, свяжитесь со мной и сообщите о ней: + +https://t.me/anygis +https://vk.com/anygis +anygis@bk.ru \ No newline at end of file diff --git a/anygis/Tracks_Strava_Ride.zmp/params.txt b/anygis/Tracks_Strava_Ride.zmp/params.txt new file mode 100644 index 00000000..4d351c42 --- /dev/null +++ b/anygis/Tracks_Strava_Ride.zmp/params.txt @@ -0,0 +1,19 @@ +п»ї +[PARAMS] +GUID={B71DF157-F075-4F01-9A69-DF344D69DF2D} +ParentSubMenu_ru=Маршруты Рё GPS-Треки +ParentSubMenu_uk=Маршруты Рё GPS-Треки +ParentSubMenu=Ways and GPS-Tracks +name_ru=Strava Heatmap - Велоспорт +name_uk=Strava Heatmap - Велоспорт +name=Strava Heatmap - Ride +NameInCache=Tracks_Strava_Ride +asLayer=1 +projection=1 +sradiusa=6378137 +sradiusb=6378137 +DefURLBase=https://anygis.ru/api/v1/Tracks_Strava_Ride/{x}/{y}/{z} +RequestHead=Referer:https://www.strava.com/heatmap\r\nConnection: keep-alive\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\r\nAccept: image/webp,image/apng,image/*,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: ru,en-US;q=0.9,en;q=0.8 +ContentType=image/jpeg,image/png +Ext=.png +License= В© Strava diff --git a/anygis/Tracks_Strava_Run.zmp/18.bmp b/anygis/Tracks_Strava_Run.zmp/18.bmp new file mode 100644 index 0000000000000000000000000000000000000000..584dfd410d894d3629a032428147daad7177b07f GIT binary patch literal 1062 zcmb8uPe|Kf7zXgSSV(ADTvKg@Hp>QMh~CA6lTB1m@aDlG3@=WQZVa`0bRyH?b{K3E z)Qbnbif6qDrv8hHZo`{`JJ~O_*0vxTG(eiiN zdsCARs{hS4-JhmDpp9W#AEwn&QofQp#2r=txI>!`;~@zM)VdKL8M|(<-}+j2AKz|Z zIWqP-Ymt;egQSE>9pRM$S{|Zb(==H-nL}-t4sM}4+}a@RetTlrS3D95z38G6BjLQv zrnW;({lH^9B-tkO+E{<(DP`f3R2~?4ZlwX zyqa5z{^WIw-poU7>iHCv8aRkzo?$#B0ii+PyQD{CZT>_ahw`cOvfrB$7CBfzj^(YKY=8l#N?pn iGry1mTxJ4?@yU}0qQ^%IuJgj3{l{K(o%i^XM1KLXaaTG3 literal 0 HcmV?d00001 diff --git a/anygis/Tracks_Strava_Run.zmp/24.bmp b/anygis/Tracks_Strava_Run.zmp/24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..13c1446856ea568d0f9a95aee4dc7592513732c2 GIT binary patch literal 1782 zcmbu9T}V@57{{M!nQJ!Pav$h9XZ8Uqc5NS&(uW8|T}2_$?52V~poU3N7t^6>s3l5y zAKjI76-5`#Hs_||g@uA-Rus7NZfEN_vpMzc+0GQP@wW8kyl3yu`|P*>^Z&n`BPV}l zL1L8Sy#%K@IaP@jfD`xKT4g2*@%E|aoV2Hx0^Q&xmA!QKfTtb4p0F)tENz75X#;N) zcpiYO8^$glj0l74qkTJGhmb)B_#7~BAKZ^%s4;8$K=*&sR1}pU1X0T6Yl8kZaCgGw z8EY&jm_BgqQUxkm;UsA&uN7QfFls9fmAp!a7U71moi!Z%>T3kA9lXup?f`Eqd_QKV znNc=ys39BOUO^$D|27QVgOLtn|DE{S>wt+TaK6^Mz&s@W{g2U;WJitQu7}|G3%Wd{ z@!k&(xOJ*dl}9^uvusIdtl~EQdvN^uG9&pZ%M@UK2S+#yVRI%=UqEBABhOuwo?=uV z4)OUUR}h^VmP;{B2-ES|VWi!Vf?lS@1lwlgkV!wF3Ps+GNQKg;?vwY7AkYzT5E+o ziV^b$g2w99BDRA{5Q5AvQwwVFTR2k62Ur}Si$J?{v%EmGLOdNb7Ck}EjjQt1=LJMn z?vn%~$r1dc>KGfP?7r7Ts|!My4jPM|AZn}1k4D+9$#I1oIcpB5!%=E}Zd$C*pV1bH z=n1xiN|e-;1F(*_=riqH86VIHepI3~YvRRbeI$KJt1CZd$7;-BY}S~NXR!R^0IdFP figgBU(MOCH5iHYhG`~|6Fkdf!*T2<7Z6^5-dX6V^ literal 0 HcmV?d00001 diff --git a/anygis/Tracks_Strava_Run.zmp/GetUrlScript.txt b/anygis/Tracks_Strava_Run.zmp/GetUrlScript.txt new file mode 100755 index 00000000..73a86cec --- /dev/null +++ b/anygis/Tracks_Strava_Run.zmp/GetUrlScript.txt @@ -0,0 +1,216 @@ +// ----------------------------------------------------------------------------- +// --- Универсальный адаптер от AnyGIS +// ----------------------------------------------------------------------------- + +// Этот скрипт призван упростить добавление новых карт в 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), выбранная рандомно. + + + +// Совет для начинающих: если хотите разобраться в этом коде, +// то удобнее всего читать его с конца. + +// Еще один совет: если будете писать свои скрипты, +// то вывод в консоль (а точнее, в окно Debug Output ) делается так: +// +// writeLn('Hello Sas.Planet!'); + + + + + + + + +// ----------------------------------------------------------------------------- +// --- 4. Вспомогательные функции +// ----------------------------------------------------------------------------- + +// --- Проверить, содержит ли одна строка другую? +function isContains(findingText: string; inSourceText: string) : boolean; +begin + result := pos(findingText, inSourceText) <> 0; +end; + + +// --- Округление до нужного количества знаков после запятой +// --- (стандартные функции округления у меня почему-то не заработали) +function roundFor(sourceNumber: Double ; digitAfterComma: integer) : string; +var + intPart, floatPart : integer; +begin + intPart := floor(sourceNumber); + floatPart := floor( (sourceNumber - intPart) * round(intPower(10, digitAfterComma)) ) + result := intToStr(intPart) + '.' + intToStr(floatPart) +end; + + +// --- Вычислить номер тайла в системе Quadkey (используется в картах Bing) +function getQuadkeyText(x: integer; y: integer; z: integer) : string; +var + i, q : byte; +begin + result:=''; + for i:=1 to z do begin + q:=0; + if x mod 2 = 1 then q := q + 1; + if y mod 2 = 1 then q := q + 2; + x := x div 2; + y := y div 2; + result := intToStr(q) + result; + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 3. Если требуется, то подставить имя для зеркала сервера +// --- на место заглушки типа {s: a,b,c} +// ----------------------------------------------------------------------------- +type + TSubst = record + mask, val : string; + end; + TSubsts = record + count : integer; + s : array [0..15] of TSubst; + end; + + +function replaceServerName(url: string) : string; +var + s, ss : string; + sarr : array [0..9] of string; + sarr_l, p : integer; + +begin + s := RegExprGetMatchSubStr(url, '\{[sS]:([^}]+)\}', 0); + if s <> '' then begin + ss := s; + ss := StringReplace(ss, '{s:', '', [rfIgnoreCase]); + ss := StringReplace(ss, '}', '', [rfIgnoreCase]); + ss := ss + ','; + sarr_l := 0; + while ss <> '' do begin + p := pos(',', ss); + if p = 0 then p := length(ss); + sarr[sarr_l] := copy(ss, 1, p-1); + sarr_l := sarr_l + 1; + delete(ss, 1, p); + end; + url := StringReplace(url, s, sarr[random(sarr_l)], []); + end; + Result := url; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 2. Если требуется, то вычислить и подставить в шаблон URL адреса +// --- нужные значения на место заглушек типа {x}, {y}, {z}. +// ----------------------------------------------------------------------------- +function replaceLeafletPlaceholders(urlTemplate: string; x: integer; y: integer; z: integer) : string; +var + options: tReplaceFlags; + calculatedValue: string; + +begin + options := [rfReplaceAll, rfIgnoreCase]; + result := urlTemplate; + + if isContains('{x}', result) then begin + calculatedValue := intToStr(x); + result := stringReplace( result, '{x}', calculatedValue, options) + end; + + if isContains('{y}', result) then begin + calculatedValue := intToStr(y); + result := stringReplace( result, '{y}', calculatedValue, options) + end; + + if isContains('{z}', result) then begin + calculatedValue := intToStr(z-1); + result := stringReplace( result, '{z}', calculatedValue, options) + end; + + if isContains('{z+1}', result) then begin + calculatedValue := intToStr(z); + result := stringReplace( result, '{z+1}', calculatedValue, options) + end; + + if isContains('{x/1024}', result) then begin + calculatedValue := intToStr(x div 1024); + result := stringReplace( result, '{x/1024}', calculatedValue, options) + end; + + if isContains('{y/1024}', result) then begin + calculatedValue := intToStr(y div 1024); + result := stringReplace( result, '{y/1024}', calculatedValue, options) + end; + + if isContains('{-y}', result) then begin + calculatedValue := intToStr( round(intPower(2, z-1)) - 1 - y); + result := stringReplace( result, '{-y}', calculatedValue, options) + end; + + if isContains('{q}', result) then begin + calculatedValue := getQuadkeyText(x, y, z); + result := stringReplace( result, '{q}', calculatedValue, options) + end; + + if isContains('{bbox}', result) then begin + result := stringReplace( result, '{bbox}', '{Left},{Bottom},{Right},{Top}', options) + result := stringReplace( result, '{Left}', roundFor(GetLMetr,8), options) + result := stringReplace( result, '{Bottom}', roundFor(GetBMetr,8), options) + result := stringReplace( result, '{Right}', roundFor(GetRMetr,8), options) + result := stringReplace( result, '{Top}', roundFor(GetTMetr,8), options) + // Делаю замену в пять операций потому, что при попытке + // сделать все одной строкой возникает ошибка. + // Возможно какое-то ограничение на память. + end; + + if isContains('{timeStamp}', result) then begin + calculatedValue := IntToStr(GetUnixTime); + result := stringReplace( result, '{timeStamp}', calculatedValue, options) + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 1. Старт скрипта. Запустить вычисление URL-адреса тайла. +// --- Скачать тайл по полученному URL. +// ----------------------------------------------------------------------------- +begin + resultURL := replaceLeafletPlaceholders(getURLBase, getX, getY, getZ); + resultURL := replaceServerName(resultURL); +end. diff --git a/anygis/Tracks_Strava_Run.zmp/info.txt b/anygis/Tracks_Strava_Run.zmp/info.txt new file mode 100644 index 00000000..615f451d --- /dev/null +++ b/anygis/Tracks_Strava_Run.zmp/info.txt @@ -0,0 +1,7 @@ +Этот файл был создан автоматически с помощью файло-генератора AnyGIS.ru + +Если вы заметили ошибку, свяжитесь со мной и сообщите о ней: + +https://t.me/anygis +https://vk.com/anygis +anygis@bk.ru \ No newline at end of file diff --git a/anygis/Tracks_Strava_Run.zmp/params.txt b/anygis/Tracks_Strava_Run.zmp/params.txt new file mode 100644 index 00000000..634e2894 --- /dev/null +++ b/anygis/Tracks_Strava_Run.zmp/params.txt @@ -0,0 +1,19 @@ +п»ї +[PARAMS] +GUID={BF69A930-3739-454A-A833-DED4C0841297} +ParentSubMenu_ru=Маршруты Рё GPS-Треки +ParentSubMenu_uk=Маршруты Рё GPS-Треки +ParentSubMenu=Ways and GPS-Tracks +name_ru=Strava Heatmap - Бег +name_uk=Strava Heatmap - Бег +name=Strava Heatmap - Run +NameInCache=Tracks_Strava_Run +asLayer=1 +projection=1 +sradiusa=6378137 +sradiusb=6378137 +DefURLBase=https://anygis.ru/api/v1/Tracks_Strava_Run/{x}/{y}/{z} +RequestHead=Referer:https://www.strava.com/heatmap\r\nConnection: keep-alive\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\r\nAccept: image/webp,image/apng,image/*,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: ru,en-US;q=0.9,en;q=0.8 +ContentType=image/jpeg,image/png +Ext=.png +License= В© Strava diff --git a/anygis/Tracks_Strava_RunAndRide.zmp/18.bmp b/anygis/Tracks_Strava_RunAndRide.zmp/18.bmp new file mode 100644 index 0000000000000000000000000000000000000000..584dfd410d894d3629a032428147daad7177b07f GIT binary patch literal 1062 zcmb8uPe|Kf7zXgSSV(ADTvKg@Hp>QMh~CA6lTB1m@aDlG3@=WQZVa`0bRyH?b{K3E z)Qbnbif6qDrv8hHZo`{`JJ~O_*0vxTG(eiiN zdsCARs{hS4-JhmDpp9W#AEwn&QofQp#2r=txI>!`;~@zM)VdKL8M|(<-}+j2AKz|Z zIWqP-Ymt;egQSE>9pRM$S{|Zb(==H-nL}-t4sM}4+}a@RetTlrS3D95z38G6BjLQv zrnW;({lH^9B-tkO+E{<(DP`f3R2~?4ZlwX zyqa5z{^WIw-poU7>iHCv8aRkzo?$#B0ii+PyQD{CZT>_ahw`cOvfrB$7CBfzj^(YKY=8l#N?pn iGry1mTxJ4?@yU}0qQ^%IuJgj3{l{K(o%i^XM1KLXaaTG3 literal 0 HcmV?d00001 diff --git a/anygis/Tracks_Strava_RunAndRide.zmp/24.bmp b/anygis/Tracks_Strava_RunAndRide.zmp/24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..13c1446856ea568d0f9a95aee4dc7592513732c2 GIT binary patch literal 1782 zcmbu9T}V@57{{M!nQJ!Pav$h9XZ8Uqc5NS&(uW8|T}2_$?52V~poU3N7t^6>s3l5y zAKjI76-5`#Hs_||g@uA-Rus7NZfEN_vpMzc+0GQP@wW8kyl3yu`|P*>^Z&n`BPV}l zL1L8Sy#%K@IaP@jfD`xKT4g2*@%E|aoV2Hx0^Q&xmA!QKfTtb4p0F)tENz75X#;N) zcpiYO8^$glj0l74qkTJGhmb)B_#7~BAKZ^%s4;8$K=*&sR1}pU1X0T6Yl8kZaCgGw z8EY&jm_BgqQUxkm;UsA&uN7QfFls9fmAp!a7U71moi!Z%>T3kA9lXup?f`Eqd_QKV znNc=ys39BOUO^$D|27QVgOLtn|DE{S>wt+TaK6^Mz&s@W{g2U;WJitQu7}|G3%Wd{ z@!k&(xOJ*dl}9^uvusIdtl~EQdvN^uG9&pZ%M@UK2S+#yVRI%=UqEBABhOuwo?=uV z4)OUUR}h^VmP;{B2-ES|VWi!Vf?lS@1lwlgkV!wF3Ps+GNQKg;?vwY7AkYzT5E+o ziV^b$g2w99BDRA{5Q5AvQwwVFTR2k62Ur}Si$J?{v%EmGLOdNb7Ck}EjjQt1=LJMn z?vn%~$r1dc>KGfP?7r7Ts|!My4jPM|AZn}1k4D+9$#I1oIcpB5!%=E}Zd$C*pV1bH z=n1xiN|e-;1F(*_=riqH86VIHepI3~YvRRbeI$KJt1CZd$7;-BY}S~NXR!R^0IdFP figgBU(MOCH5iHYhG`~|6Fkdf!*T2<7Z6^5-dX6V^ literal 0 HcmV?d00001 diff --git a/anygis/Tracks_Strava_RunAndRide.zmp/GetUrlScript.txt b/anygis/Tracks_Strava_RunAndRide.zmp/GetUrlScript.txt new file mode 100755 index 00000000..73a86cec --- /dev/null +++ b/anygis/Tracks_Strava_RunAndRide.zmp/GetUrlScript.txt @@ -0,0 +1,216 @@ +// ----------------------------------------------------------------------------- +// --- Универсальный адаптер от AnyGIS +// ----------------------------------------------------------------------------- + +// Этот скрипт призван упростить добавление новых карт в 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), выбранная рандомно. + + + +// Совет для начинающих: если хотите разобраться в этом коде, +// то удобнее всего читать его с конца. + +// Еще один совет: если будете писать свои скрипты, +// то вывод в консоль (а точнее, в окно Debug Output ) делается так: +// +// writeLn('Hello Sas.Planet!'); + + + + + + + + +// ----------------------------------------------------------------------------- +// --- 4. Вспомогательные функции +// ----------------------------------------------------------------------------- + +// --- Проверить, содержит ли одна строка другую? +function isContains(findingText: string; inSourceText: string) : boolean; +begin + result := pos(findingText, inSourceText) <> 0; +end; + + +// --- Округление до нужного количества знаков после запятой +// --- (стандартные функции округления у меня почему-то не заработали) +function roundFor(sourceNumber: Double ; digitAfterComma: integer) : string; +var + intPart, floatPart : integer; +begin + intPart := floor(sourceNumber); + floatPart := floor( (sourceNumber - intPart) * round(intPower(10, digitAfterComma)) ) + result := intToStr(intPart) + '.' + intToStr(floatPart) +end; + + +// --- Вычислить номер тайла в системе Quadkey (используется в картах Bing) +function getQuadkeyText(x: integer; y: integer; z: integer) : string; +var + i, q : byte; +begin + result:=''; + for i:=1 to z do begin + q:=0; + if x mod 2 = 1 then q := q + 1; + if y mod 2 = 1 then q := q + 2; + x := x div 2; + y := y div 2; + result := intToStr(q) + result; + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 3. Если требуется, то подставить имя для зеркала сервера +// --- на место заглушки типа {s: a,b,c} +// ----------------------------------------------------------------------------- +type + TSubst = record + mask, val : string; + end; + TSubsts = record + count : integer; + s : array [0..15] of TSubst; + end; + + +function replaceServerName(url: string) : string; +var + s, ss : string; + sarr : array [0..9] of string; + sarr_l, p : integer; + +begin + s := RegExprGetMatchSubStr(url, '\{[sS]:([^}]+)\}', 0); + if s <> '' then begin + ss := s; + ss := StringReplace(ss, '{s:', '', [rfIgnoreCase]); + ss := StringReplace(ss, '}', '', [rfIgnoreCase]); + ss := ss + ','; + sarr_l := 0; + while ss <> '' do begin + p := pos(',', ss); + if p = 0 then p := length(ss); + sarr[sarr_l] := copy(ss, 1, p-1); + sarr_l := sarr_l + 1; + delete(ss, 1, p); + end; + url := StringReplace(url, s, sarr[random(sarr_l)], []); + end; + Result := url; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 2. Если требуется, то вычислить и подставить в шаблон URL адреса +// --- нужные значения на место заглушек типа {x}, {y}, {z}. +// ----------------------------------------------------------------------------- +function replaceLeafletPlaceholders(urlTemplate: string; x: integer; y: integer; z: integer) : string; +var + options: tReplaceFlags; + calculatedValue: string; + +begin + options := [rfReplaceAll, rfIgnoreCase]; + result := urlTemplate; + + if isContains('{x}', result) then begin + calculatedValue := intToStr(x); + result := stringReplace( result, '{x}', calculatedValue, options) + end; + + if isContains('{y}', result) then begin + calculatedValue := intToStr(y); + result := stringReplace( result, '{y}', calculatedValue, options) + end; + + if isContains('{z}', result) then begin + calculatedValue := intToStr(z-1); + result := stringReplace( result, '{z}', calculatedValue, options) + end; + + if isContains('{z+1}', result) then begin + calculatedValue := intToStr(z); + result := stringReplace( result, '{z+1}', calculatedValue, options) + end; + + if isContains('{x/1024}', result) then begin + calculatedValue := intToStr(x div 1024); + result := stringReplace( result, '{x/1024}', calculatedValue, options) + end; + + if isContains('{y/1024}', result) then begin + calculatedValue := intToStr(y div 1024); + result := stringReplace( result, '{y/1024}', calculatedValue, options) + end; + + if isContains('{-y}', result) then begin + calculatedValue := intToStr( round(intPower(2, z-1)) - 1 - y); + result := stringReplace( result, '{-y}', calculatedValue, options) + end; + + if isContains('{q}', result) then begin + calculatedValue := getQuadkeyText(x, y, z); + result := stringReplace( result, '{q}', calculatedValue, options) + end; + + if isContains('{bbox}', result) then begin + result := stringReplace( result, '{bbox}', '{Left},{Bottom},{Right},{Top}', options) + result := stringReplace( result, '{Left}', roundFor(GetLMetr,8), options) + result := stringReplace( result, '{Bottom}', roundFor(GetBMetr,8), options) + result := stringReplace( result, '{Right}', roundFor(GetRMetr,8), options) + result := stringReplace( result, '{Top}', roundFor(GetTMetr,8), options) + // Делаю замену в пять операций потому, что при попытке + // сделать все одной строкой возникает ошибка. + // Возможно какое-то ограничение на память. + end; + + if isContains('{timeStamp}', result) then begin + calculatedValue := IntToStr(GetUnixTime); + result := stringReplace( result, '{timeStamp}', calculatedValue, options) + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 1. Старт скрипта. Запустить вычисление URL-адреса тайла. +// --- Скачать тайл по полученному URL. +// ----------------------------------------------------------------------------- +begin + resultURL := replaceLeafletPlaceholders(getURLBase, getX, getY, getZ); + resultURL := replaceServerName(resultURL); +end. diff --git a/anygis/Tracks_Strava_RunAndRide.zmp/info.txt b/anygis/Tracks_Strava_RunAndRide.zmp/info.txt new file mode 100644 index 00000000..615f451d --- /dev/null +++ b/anygis/Tracks_Strava_RunAndRide.zmp/info.txt @@ -0,0 +1,7 @@ +Этот файл был создан автоматически с помощью файло-генератора AnyGIS.ru + +Если вы заметили ошибку, свяжитесь со мной и сообщите о ней: + +https://t.me/anygis +https://vk.com/anygis +anygis@bk.ru \ No newline at end of file diff --git a/anygis/Tracks_Strava_RunAndRide.zmp/params.txt b/anygis/Tracks_Strava_RunAndRide.zmp/params.txt new file mode 100644 index 00000000..544126d0 --- /dev/null +++ b/anygis/Tracks_Strava_RunAndRide.zmp/params.txt @@ -0,0 +1,19 @@ +п»ї +[PARAMS] +GUID={B5C2127C-56AC-4630-94A1-34E17F5B183F} +ParentSubMenu_ru=Маршруты Рё GPS-Треки +ParentSubMenu_uk=Маршруты Рё GPS-Треки +ParentSubMenu=Ways and GPS-Tracks +name_ru=Strava Heatmap - Велоспорт Рё Бег (beta) +name_uk=Strava Heatmap - Велоспорт Рё Бег (beta) +name=Strava Heatmap - RunAndRide (beta) +NameInCache=Tracks_Strava_RunAndRide +asLayer=1 +projection=1 +sradiusa=6378137 +sradiusb=6378137 +DefURLBase=https://anygis.ru/api/v1/Tracks_Strava_RunAndRide/{x}/{y}/{z} +RequestHead=Referer:https://www.strava.com/heatmap\r\nConnection: keep-alive\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\r\nAccept: image/webp,image/apng,image/*,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: ru,en-US;q=0.9,en;q=0.8 +ContentType=image/jpeg,image/png +Ext=.png +License= В© Strava diff --git a/anygis/Tracks_Strava_Water.zmp/18.bmp b/anygis/Tracks_Strava_Water.zmp/18.bmp new file mode 100644 index 0000000000000000000000000000000000000000..584dfd410d894d3629a032428147daad7177b07f GIT binary patch literal 1062 zcmb8uPe|Kf7zXgSSV(ADTvKg@Hp>QMh~CA6lTB1m@aDlG3@=WQZVa`0bRyH?b{K3E z)Qbnbif6qDrv8hHZo`{`JJ~O_*0vxTG(eiiN zdsCARs{hS4-JhmDpp9W#AEwn&QofQp#2r=txI>!`;~@zM)VdKL8M|(<-}+j2AKz|Z zIWqP-Ymt;egQSE>9pRM$S{|Zb(==H-nL}-t4sM}4+}a@RetTlrS3D95z38G6BjLQv zrnW;({lH^9B-tkO+E{<(DP`f3R2~?4ZlwX zyqa5z{^WIw-poU7>iHCv8aRkzo?$#B0ii+PyQD{CZT>_ahw`cOvfrB$7CBfzj^(YKY=8l#N?pn iGry1mTxJ4?@yU}0qQ^%IuJgj3{l{K(o%i^XM1KLXaaTG3 literal 0 HcmV?d00001 diff --git a/anygis/Tracks_Strava_Water.zmp/24.bmp b/anygis/Tracks_Strava_Water.zmp/24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..13c1446856ea568d0f9a95aee4dc7592513732c2 GIT binary patch literal 1782 zcmbu9T}V@57{{M!nQJ!Pav$h9XZ8Uqc5NS&(uW8|T}2_$?52V~poU3N7t^6>s3l5y zAKjI76-5`#Hs_||g@uA-Rus7NZfEN_vpMzc+0GQP@wW8kyl3yu`|P*>^Z&n`BPV}l zL1L8Sy#%K@IaP@jfD`xKT4g2*@%E|aoV2Hx0^Q&xmA!QKfTtb4p0F)tENz75X#;N) zcpiYO8^$glj0l74qkTJGhmb)B_#7~BAKZ^%s4;8$K=*&sR1}pU1X0T6Yl8kZaCgGw z8EY&jm_BgqQUxkm;UsA&uN7QfFls9fmAp!a7U71moi!Z%>T3kA9lXup?f`Eqd_QKV znNc=ys39BOUO^$D|27QVgOLtn|DE{S>wt+TaK6^Mz&s@W{g2U;WJitQu7}|G3%Wd{ z@!k&(xOJ*dl}9^uvusIdtl~EQdvN^uG9&pZ%M@UK2S+#yVRI%=UqEBABhOuwo?=uV z4)OUUR}h^VmP;{B2-ES|VWi!Vf?lS@1lwlgkV!wF3Ps+GNQKg;?vwY7AkYzT5E+o ziV^b$g2w99BDRA{5Q5AvQwwVFTR2k62Ur}Si$J?{v%EmGLOdNb7Ck}EjjQt1=LJMn z?vn%~$r1dc>KGfP?7r7Ts|!My4jPM|AZn}1k4D+9$#I1oIcpB5!%=E}Zd$C*pV1bH z=n1xiN|e-;1F(*_=riqH86VIHepI3~YvRRbeI$KJt1CZd$7;-BY}S~NXR!R^0IdFP figgBU(MOCH5iHYhG`~|6Fkdf!*T2<7Z6^5-dX6V^ literal 0 HcmV?d00001 diff --git a/anygis/Tracks_Strava_Water.zmp/GetUrlScript.txt b/anygis/Tracks_Strava_Water.zmp/GetUrlScript.txt new file mode 100755 index 00000000..73a86cec --- /dev/null +++ b/anygis/Tracks_Strava_Water.zmp/GetUrlScript.txt @@ -0,0 +1,216 @@ +// ----------------------------------------------------------------------------- +// --- Универсальный адаптер от AnyGIS +// ----------------------------------------------------------------------------- + +// Этот скрипт призван упростить добавление новых карт в 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), выбранная рандомно. + + + +// Совет для начинающих: если хотите разобраться в этом коде, +// то удобнее всего читать его с конца. + +// Еще один совет: если будете писать свои скрипты, +// то вывод в консоль (а точнее, в окно Debug Output ) делается так: +// +// writeLn('Hello Sas.Planet!'); + + + + + + + + +// ----------------------------------------------------------------------------- +// --- 4. Вспомогательные функции +// ----------------------------------------------------------------------------- + +// --- Проверить, содержит ли одна строка другую? +function isContains(findingText: string; inSourceText: string) : boolean; +begin + result := pos(findingText, inSourceText) <> 0; +end; + + +// --- Округление до нужного количества знаков после запятой +// --- (стандартные функции округления у меня почему-то не заработали) +function roundFor(sourceNumber: Double ; digitAfterComma: integer) : string; +var + intPart, floatPart : integer; +begin + intPart := floor(sourceNumber); + floatPart := floor( (sourceNumber - intPart) * round(intPower(10, digitAfterComma)) ) + result := intToStr(intPart) + '.' + intToStr(floatPart) +end; + + +// --- Вычислить номер тайла в системе Quadkey (используется в картах Bing) +function getQuadkeyText(x: integer; y: integer; z: integer) : string; +var + i, q : byte; +begin + result:=''; + for i:=1 to z do begin + q:=0; + if x mod 2 = 1 then q := q + 1; + if y mod 2 = 1 then q := q + 2; + x := x div 2; + y := y div 2; + result := intToStr(q) + result; + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 3. Если требуется, то подставить имя для зеркала сервера +// --- на место заглушки типа {s: a,b,c} +// ----------------------------------------------------------------------------- +type + TSubst = record + mask, val : string; + end; + TSubsts = record + count : integer; + s : array [0..15] of TSubst; + end; + + +function replaceServerName(url: string) : string; +var + s, ss : string; + sarr : array [0..9] of string; + sarr_l, p : integer; + +begin + s := RegExprGetMatchSubStr(url, '\{[sS]:([^}]+)\}', 0); + if s <> '' then begin + ss := s; + ss := StringReplace(ss, '{s:', '', [rfIgnoreCase]); + ss := StringReplace(ss, '}', '', [rfIgnoreCase]); + ss := ss + ','; + sarr_l := 0; + while ss <> '' do begin + p := pos(',', ss); + if p = 0 then p := length(ss); + sarr[sarr_l] := copy(ss, 1, p-1); + sarr_l := sarr_l + 1; + delete(ss, 1, p); + end; + url := StringReplace(url, s, sarr[random(sarr_l)], []); + end; + Result := url; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 2. Если требуется, то вычислить и подставить в шаблон URL адреса +// --- нужные значения на место заглушек типа {x}, {y}, {z}. +// ----------------------------------------------------------------------------- +function replaceLeafletPlaceholders(urlTemplate: string; x: integer; y: integer; z: integer) : string; +var + options: tReplaceFlags; + calculatedValue: string; + +begin + options := [rfReplaceAll, rfIgnoreCase]; + result := urlTemplate; + + if isContains('{x}', result) then begin + calculatedValue := intToStr(x); + result := stringReplace( result, '{x}', calculatedValue, options) + end; + + if isContains('{y}', result) then begin + calculatedValue := intToStr(y); + result := stringReplace( result, '{y}', calculatedValue, options) + end; + + if isContains('{z}', result) then begin + calculatedValue := intToStr(z-1); + result := stringReplace( result, '{z}', calculatedValue, options) + end; + + if isContains('{z+1}', result) then begin + calculatedValue := intToStr(z); + result := stringReplace( result, '{z+1}', calculatedValue, options) + end; + + if isContains('{x/1024}', result) then begin + calculatedValue := intToStr(x div 1024); + result := stringReplace( result, '{x/1024}', calculatedValue, options) + end; + + if isContains('{y/1024}', result) then begin + calculatedValue := intToStr(y div 1024); + result := stringReplace( result, '{y/1024}', calculatedValue, options) + end; + + if isContains('{-y}', result) then begin + calculatedValue := intToStr( round(intPower(2, z-1)) - 1 - y); + result := stringReplace( result, '{-y}', calculatedValue, options) + end; + + if isContains('{q}', result) then begin + calculatedValue := getQuadkeyText(x, y, z); + result := stringReplace( result, '{q}', calculatedValue, options) + end; + + if isContains('{bbox}', result) then begin + result := stringReplace( result, '{bbox}', '{Left},{Bottom},{Right},{Top}', options) + result := stringReplace( result, '{Left}', roundFor(GetLMetr,8), options) + result := stringReplace( result, '{Bottom}', roundFor(GetBMetr,8), options) + result := stringReplace( result, '{Right}', roundFor(GetRMetr,8), options) + result := stringReplace( result, '{Top}', roundFor(GetTMetr,8), options) + // Делаю замену в пять операций потому, что при попытке + // сделать все одной строкой возникает ошибка. + // Возможно какое-то ограничение на память. + end; + + if isContains('{timeStamp}', result) then begin + calculatedValue := IntToStr(GetUnixTime); + result := stringReplace( result, '{timeStamp}', calculatedValue, options) + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 1. Старт скрипта. Запустить вычисление URL-адреса тайла. +// --- Скачать тайл по полученному URL. +// ----------------------------------------------------------------------------- +begin + resultURL := replaceLeafletPlaceholders(getURLBase, getX, getY, getZ); + resultURL := replaceServerName(resultURL); +end. diff --git a/anygis/Tracks_Strava_Water.zmp/info.txt b/anygis/Tracks_Strava_Water.zmp/info.txt new file mode 100644 index 00000000..615f451d --- /dev/null +++ b/anygis/Tracks_Strava_Water.zmp/info.txt @@ -0,0 +1,7 @@ +Этот файл был создан автоматически с помощью файло-генератора AnyGIS.ru + +Если вы заметили ошибку, свяжитесь со мной и сообщите о ней: + +https://t.me/anygis +https://vk.com/anygis +anygis@bk.ru \ No newline at end of file diff --git a/anygis/Tracks_Strava_Water.zmp/params.txt b/anygis/Tracks_Strava_Water.zmp/params.txt new file mode 100644 index 00000000..681d7f8e --- /dev/null +++ b/anygis/Tracks_Strava_Water.zmp/params.txt @@ -0,0 +1,19 @@ +п»ї +[PARAMS] +GUID={542841FD-209E-4C96-9714-BC4F337371CA} +ParentSubMenu_ru=Маршруты Рё GPS-Треки +ParentSubMenu_uk=Маршруты Рё GPS-Треки +ParentSubMenu=Ways and GPS-Tracks +name_ru=Strava Heatmap - Водный СЃРїРѕСЂС‚ +name_uk=Strava Heatmap - Водный СЃРїРѕСЂС‚ +name=Strava Heatmap - Water +NameInCache=Tracks_Strava_Water +asLayer=1 +projection=1 +sradiusa=6378137 +sradiusb=6378137 +DefURLBase=https://anygis.ru/api/v1/Tracks_Strava_Water/{x}/{y}/{z} +RequestHead=Referer:https://www.strava.com/heatmap\r\nConnection: keep-alive\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\r\nAccept: image/webp,image/apng,image/*,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: ru,en-US;q=0.9,en;q=0.8 +ContentType=image/jpeg,image/png +Ext=.png +License= В© Strava diff --git a/anygis/Tracks_Strava_Winter.zmp/18.bmp b/anygis/Tracks_Strava_Winter.zmp/18.bmp new file mode 100644 index 0000000000000000000000000000000000000000..584dfd410d894d3629a032428147daad7177b07f GIT binary patch literal 1062 zcmb8uPe|Kf7zXgSSV(ADTvKg@Hp>QMh~CA6lTB1m@aDlG3@=WQZVa`0bRyH?b{K3E z)Qbnbif6qDrv8hHZo`{`JJ~O_*0vxTG(eiiN zdsCARs{hS4-JhmDpp9W#AEwn&QofQp#2r=txI>!`;~@zM)VdKL8M|(<-}+j2AKz|Z zIWqP-Ymt;egQSE>9pRM$S{|Zb(==H-nL}-t4sM}4+}a@RetTlrS3D95z38G6BjLQv zrnW;({lH^9B-tkO+E{<(DP`f3R2~?4ZlwX zyqa5z{^WIw-poU7>iHCv8aRkzo?$#B0ii+PyQD{CZT>_ahw`cOvfrB$7CBfzj^(YKY=8l#N?pn iGry1mTxJ4?@yU}0qQ^%IuJgj3{l{K(o%i^XM1KLXaaTG3 literal 0 HcmV?d00001 diff --git a/anygis/Tracks_Strava_Winter.zmp/24.bmp b/anygis/Tracks_Strava_Winter.zmp/24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..13c1446856ea568d0f9a95aee4dc7592513732c2 GIT binary patch literal 1782 zcmbu9T}V@57{{M!nQJ!Pav$h9XZ8Uqc5NS&(uW8|T}2_$?52V~poU3N7t^6>s3l5y zAKjI76-5`#Hs_||g@uA-Rus7NZfEN_vpMzc+0GQP@wW8kyl3yu`|P*>^Z&n`BPV}l zL1L8Sy#%K@IaP@jfD`xKT4g2*@%E|aoV2Hx0^Q&xmA!QKfTtb4p0F)tENz75X#;N) zcpiYO8^$glj0l74qkTJGhmb)B_#7~BAKZ^%s4;8$K=*&sR1}pU1X0T6Yl8kZaCgGw z8EY&jm_BgqQUxkm;UsA&uN7QfFls9fmAp!a7U71moi!Z%>T3kA9lXup?f`Eqd_QKV znNc=ys39BOUO^$D|27QVgOLtn|DE{S>wt+TaK6^Mz&s@W{g2U;WJitQu7}|G3%Wd{ z@!k&(xOJ*dl}9^uvusIdtl~EQdvN^uG9&pZ%M@UK2S+#yVRI%=UqEBABhOuwo?=uV z4)OUUR}h^VmP;{B2-ES|VWi!Vf?lS@1lwlgkV!wF3Ps+GNQKg;?vwY7AkYzT5E+o ziV^b$g2w99BDRA{5Q5AvQwwVFTR2k62Ur}Si$J?{v%EmGLOdNb7Ck}EjjQt1=LJMn z?vn%~$r1dc>KGfP?7r7Ts|!My4jPM|AZn}1k4D+9$#I1oIcpB5!%=E}Zd$C*pV1bH z=n1xiN|e-;1F(*_=riqH86VIHepI3~YvRRbeI$KJt1CZd$7;-BY}S~NXR!R^0IdFP figgBU(MOCH5iHYhG`~|6Fkdf!*T2<7Z6^5-dX6V^ literal 0 HcmV?d00001 diff --git a/anygis/Tracks_Strava_Winter.zmp/GetUrlScript.txt b/anygis/Tracks_Strava_Winter.zmp/GetUrlScript.txt new file mode 100755 index 00000000..73a86cec --- /dev/null +++ b/anygis/Tracks_Strava_Winter.zmp/GetUrlScript.txt @@ -0,0 +1,216 @@ +// ----------------------------------------------------------------------------- +// --- Универсальный адаптер от AnyGIS +// ----------------------------------------------------------------------------- + +// Этот скрипт призван упростить добавление новых карт в 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), выбранная рандомно. + + + +// Совет для начинающих: если хотите разобраться в этом коде, +// то удобнее всего читать его с конца. + +// Еще один совет: если будете писать свои скрипты, +// то вывод в консоль (а точнее, в окно Debug Output ) делается так: +// +// writeLn('Hello Sas.Planet!'); + + + + + + + + +// ----------------------------------------------------------------------------- +// --- 4. Вспомогательные функции +// ----------------------------------------------------------------------------- + +// --- Проверить, содержит ли одна строка другую? +function isContains(findingText: string; inSourceText: string) : boolean; +begin + result := pos(findingText, inSourceText) <> 0; +end; + + +// --- Округление до нужного количества знаков после запятой +// --- (стандартные функции округления у меня почему-то не заработали) +function roundFor(sourceNumber: Double ; digitAfterComma: integer) : string; +var + intPart, floatPart : integer; +begin + intPart := floor(sourceNumber); + floatPart := floor( (sourceNumber - intPart) * round(intPower(10, digitAfterComma)) ) + result := intToStr(intPart) + '.' + intToStr(floatPart) +end; + + +// --- Вычислить номер тайла в системе Quadkey (используется в картах Bing) +function getQuadkeyText(x: integer; y: integer; z: integer) : string; +var + i, q : byte; +begin + result:=''; + for i:=1 to z do begin + q:=0; + if x mod 2 = 1 then q := q + 1; + if y mod 2 = 1 then q := q + 2; + x := x div 2; + y := y div 2; + result := intToStr(q) + result; + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 3. Если требуется, то подставить имя для зеркала сервера +// --- на место заглушки типа {s: a,b,c} +// ----------------------------------------------------------------------------- +type + TSubst = record + mask, val : string; + end; + TSubsts = record + count : integer; + s : array [0..15] of TSubst; + end; + + +function replaceServerName(url: string) : string; +var + s, ss : string; + sarr : array [0..9] of string; + sarr_l, p : integer; + +begin + s := RegExprGetMatchSubStr(url, '\{[sS]:([^}]+)\}', 0); + if s <> '' then begin + ss := s; + ss := StringReplace(ss, '{s:', '', [rfIgnoreCase]); + ss := StringReplace(ss, '}', '', [rfIgnoreCase]); + ss := ss + ','; + sarr_l := 0; + while ss <> '' do begin + p := pos(',', ss); + if p = 0 then p := length(ss); + sarr[sarr_l] := copy(ss, 1, p-1); + sarr_l := sarr_l + 1; + delete(ss, 1, p); + end; + url := StringReplace(url, s, sarr[random(sarr_l)], []); + end; + Result := url; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 2. Если требуется, то вычислить и подставить в шаблон URL адреса +// --- нужные значения на место заглушек типа {x}, {y}, {z}. +// ----------------------------------------------------------------------------- +function replaceLeafletPlaceholders(urlTemplate: string; x: integer; y: integer; z: integer) : string; +var + options: tReplaceFlags; + calculatedValue: string; + +begin + options := [rfReplaceAll, rfIgnoreCase]; + result := urlTemplate; + + if isContains('{x}', result) then begin + calculatedValue := intToStr(x); + result := stringReplace( result, '{x}', calculatedValue, options) + end; + + if isContains('{y}', result) then begin + calculatedValue := intToStr(y); + result := stringReplace( result, '{y}', calculatedValue, options) + end; + + if isContains('{z}', result) then begin + calculatedValue := intToStr(z-1); + result := stringReplace( result, '{z}', calculatedValue, options) + end; + + if isContains('{z+1}', result) then begin + calculatedValue := intToStr(z); + result := stringReplace( result, '{z+1}', calculatedValue, options) + end; + + if isContains('{x/1024}', result) then begin + calculatedValue := intToStr(x div 1024); + result := stringReplace( result, '{x/1024}', calculatedValue, options) + end; + + if isContains('{y/1024}', result) then begin + calculatedValue := intToStr(y div 1024); + result := stringReplace( result, '{y/1024}', calculatedValue, options) + end; + + if isContains('{-y}', result) then begin + calculatedValue := intToStr( round(intPower(2, z-1)) - 1 - y); + result := stringReplace( result, '{-y}', calculatedValue, options) + end; + + if isContains('{q}', result) then begin + calculatedValue := getQuadkeyText(x, y, z); + result := stringReplace( result, '{q}', calculatedValue, options) + end; + + if isContains('{bbox}', result) then begin + result := stringReplace( result, '{bbox}', '{Left},{Bottom},{Right},{Top}', options) + result := stringReplace( result, '{Left}', roundFor(GetLMetr,8), options) + result := stringReplace( result, '{Bottom}', roundFor(GetBMetr,8), options) + result := stringReplace( result, '{Right}', roundFor(GetRMetr,8), options) + result := stringReplace( result, '{Top}', roundFor(GetTMetr,8), options) + // Делаю замену в пять операций потому, что при попытке + // сделать все одной строкой возникает ошибка. + // Возможно какое-то ограничение на память. + end; + + if isContains('{timeStamp}', result) then begin + calculatedValue := IntToStr(GetUnixTime); + result := stringReplace( result, '{timeStamp}', calculatedValue, options) + end; +end; + + + + +// ----------------------------------------------------------------------------- +// --- 1. Старт скрипта. Запустить вычисление URL-адреса тайла. +// --- Скачать тайл по полученному URL. +// ----------------------------------------------------------------------------- +begin + resultURL := replaceLeafletPlaceholders(getURLBase, getX, getY, getZ); + resultURL := replaceServerName(resultURL); +end. diff --git a/anygis/Tracks_Strava_Winter.zmp/info.txt b/anygis/Tracks_Strava_Winter.zmp/info.txt new file mode 100644 index 00000000..615f451d --- /dev/null +++ b/anygis/Tracks_Strava_Winter.zmp/info.txt @@ -0,0 +1,7 @@ +Этот файл был создан автоматически с помощью файло-генератора AnyGIS.ru + +Если вы заметили ошибку, свяжитесь со мной и сообщите о ней: + +https://t.me/anygis +https://vk.com/anygis +anygis@bk.ru \ No newline at end of file diff --git a/anygis/Tracks_Strava_Winter.zmp/params.txt b/anygis/Tracks_Strava_Winter.zmp/params.txt new file mode 100644 index 00000000..7f9b7eb0 --- /dev/null +++ b/anygis/Tracks_Strava_Winter.zmp/params.txt @@ -0,0 +1,19 @@ +п»ї +[PARAMS] +GUID={051E9432-9EBD-4CB0-B21E-E209209A28C7} +ParentSubMenu_ru=Маршруты Рё GPS-Треки +ParentSubMenu_uk=Маршруты Рё GPS-Треки +ParentSubMenu=Ways and GPS-Tracks +name_ru=Strava Heatmap - Р—РёРјРЅРёР№ СЃРїРѕСЂС‚ +name_uk=Strava Heatmap - Р—РёРјРЅРёР№ СЃРїРѕСЂС‚ +name=Strava Heatmap - Winter +NameInCache=Tracks_Strava_Winter +asLayer=1 +projection=1 +sradiusa=6378137 +sradiusb=6378137 +DefURLBase=https://anygis.ru/api/v1/Tracks_Strava_Winter/{x}/{y}/{z} +RequestHead=Referer:https://www.strava.com/heatmap\r\nConnection: keep-alive\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\r\nAccept: image/webp,image/apng,image/*,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: ru,en-US;q=0.9,en;q=0.8 +ContentType=image/jpeg,image/png +Ext=.png +License= В© Strava diff --git a/anygis/rusOurdoor.zmp/GetUrlScript.txt b/anygis/rusOurdoor.zmp/GetUrlScript.txt deleted file mode 100644 index b9507849..00000000 --- a/anygis/rusOurdoor.zmp/GetUrlScript.txt +++ /dev/null @@ -1,3 +0,0 @@ -begin - ResultURL:= GetUrlBase + inttostr(GetX) + '/' + inttostr(GetY) + '/' + inttostr(GetZ - 1); -end. diff --git a/anygis/rusOurdoor.zmp/params.txt b/anygis/rusOurdoor.zmp/params.txt deleted file mode 100644 index 54f988d2..00000000 --- a/anygis/rusOurdoor.zmp/params.txt +++ /dev/null @@ -1,15 +0,0 @@ -[PARAMS] -pnum=170 -GUID={01BDC3A9-D0C1-4B84-BFB5-94AAF9D100F7} -name=RusOutdoor maps -NameInCache=rusoutdoors -DefURLBase=https://anygis.herokuapp.com/Combo_RusOutdoor/ -Ext=.jpg -defaultContentType=image/jpeg,image/png -ContentType=image/jpeg,image/png -projection=1 -sradiusa=6378137 -sradiusb=6378137 -ParentSubMenu_ru=Другие карты\AnyGIS -ParentSubMenu=Other maps\AnyGIS -ParentSubMenu_uk=Інші карти\AnyGIS \ No newline at end of file diff --git a/anygis/rusOurdoor_lite.zmp/GetUrlScript.txt b/anygis/rusOurdoor_lite.zmp/GetUrlScript.txt deleted file mode 100644 index b9507849..00000000 --- a/anygis/rusOurdoor_lite.zmp/GetUrlScript.txt +++ /dev/null @@ -1,3 +0,0 @@ -begin - ResultURL:= GetUrlBase + inttostr(GetX) + '/' + inttostr(GetY) + '/' + inttostr(GetZ - 1); -end. diff --git a/anygis/rusOurdoor_lite.zmp/params.txt b/anygis/rusOurdoor_lite.zmp/params.txt deleted file mode 100644 index 1f0e6c35..00000000 --- a/anygis/rusOurdoor_lite.zmp/params.txt +++ /dev/null @@ -1,15 +0,0 @@ -[PARAMS] -pnum=170 -GUID={01BDC3A9-D0C2-4B84-BFB5-94AAF9D100F7} -name=RusOutdoor maps (lite) -NameInCache=rusoutdoors_lite -DefURLBase=https://anygis.herokuapp.com/Combo_RusOutdoor_lite/ -Ext=.jpg -defaultContentType=image/jpeg,image/png -ContentType=image/jpeg,image/png -projection=1 -sradiusa=6378137 -sradiusb=6378137 -ParentSubMenu_ru=Другие карты\AnyGIS -ParentSubMenu=Other maps\AnyGIS -ParentSubMenu_uk=Інші карти\AnyGIS