diff --git a/_OSM/osm_WayMarkeredTrails_Cycling.zmp/params.txt b/_OSM/osm_WayMarkeredTrails_Cycling.zmp/params.txt index f5762e0b0..d6dfa1085 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 1146c041e..b914c1a6c 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 215773892..d97f37fb0 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 4692568ef..c3e38916d 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 000000000..73a86cecf --- /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 000000000..615f451d0 --- /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 000000000..5d2262f15 --- /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 000000000..73a86cecf --- /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 000000000..615f451d0 --- /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 000000000..4d351c42c --- /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 000000000..584dfd410 Binary files /dev/null and b/anygis/Tracks_Strava_Run.zmp/18.bmp differ diff --git a/anygis/Tracks_Strava_Run.zmp/24.bmp b/anygis/Tracks_Strava_Run.zmp/24.bmp new file mode 100644 index 000000000..13c144685 Binary files /dev/null and b/anygis/Tracks_Strava_Run.zmp/24.bmp differ diff --git a/anygis/Tracks_Strava_Run.zmp/GetUrlScript.txt b/anygis/Tracks_Strava_Run.zmp/GetUrlScript.txt new file mode 100755 index 000000000..73a86cecf --- /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 000000000..615f451d0 --- /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 000000000..634e28945 --- /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 000000000..584dfd410 Binary files /dev/null and b/anygis/Tracks_Strava_RunAndRide.zmp/18.bmp differ diff --git a/anygis/Tracks_Strava_RunAndRide.zmp/24.bmp b/anygis/Tracks_Strava_RunAndRide.zmp/24.bmp new file mode 100644 index 000000000..13c144685 Binary files /dev/null and b/anygis/Tracks_Strava_RunAndRide.zmp/24.bmp differ diff --git a/anygis/Tracks_Strava_RunAndRide.zmp/GetUrlScript.txt b/anygis/Tracks_Strava_RunAndRide.zmp/GetUrlScript.txt new file mode 100755 index 000000000..73a86cecf --- /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 000000000..615f451d0 --- /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 000000000..544126d0e --- /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 000000000..584dfd410 Binary files /dev/null and b/anygis/Tracks_Strava_Water.zmp/18.bmp differ diff --git a/anygis/Tracks_Strava_Water.zmp/24.bmp b/anygis/Tracks_Strava_Water.zmp/24.bmp new file mode 100644 index 000000000..13c144685 Binary files /dev/null and b/anygis/Tracks_Strava_Water.zmp/24.bmp differ diff --git a/anygis/Tracks_Strava_Water.zmp/GetUrlScript.txt b/anygis/Tracks_Strava_Water.zmp/GetUrlScript.txt new file mode 100755 index 000000000..73a86cecf --- /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 000000000..615f451d0 --- /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 000000000..681d7f8ee --- /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 000000000..584dfd410 Binary files /dev/null and b/anygis/Tracks_Strava_Winter.zmp/18.bmp differ diff --git a/anygis/Tracks_Strava_Winter.zmp/24.bmp b/anygis/Tracks_Strava_Winter.zmp/24.bmp new file mode 100644 index 000000000..13c144685 Binary files /dev/null and b/anygis/Tracks_Strava_Winter.zmp/24.bmp differ diff --git a/anygis/Tracks_Strava_Winter.zmp/GetUrlScript.txt b/anygis/Tracks_Strava_Winter.zmp/GetUrlScript.txt new file mode 100755 index 000000000..73a86cecf --- /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 000000000..615f451d0 --- /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 000000000..7f9b7eb01 --- /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 b95078492..000000000 --- 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 54f988d2d..000000000 --- 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 b95078492..000000000 --- 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 1f0e6c351..000000000 --- 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