From e6723c4ce48d9ff8bb4db13ca316f123acf66dc2 Mon Sep 17 00:00:00 2001 From: sasgis <> Date: Sat, 12 Dec 1970 12:00:00 +0000 Subject: [PATCH] update zmp --- .../ggc/karta_ggc_500m.zmp/GetUrlScript.txt | 51 ++++++++++++++++--- Genshtab/ggc/karta_ggc_500m.zmp/params.txt | 1 + Genshtab/karta_gsh_10km.zmp/GetUrlScript.txt | 51 ++++++++++++++++--- Genshtab/karta_gsh_10km.zmp/params.txt | 1 + Genshtab/karta_gsh_1km.zmp/GetUrlScript.txt | 51 ++++++++++++++++--- Genshtab/karta_gsh_1km.zmp/params.txt | 3 +- Genshtab/karta_gsh_250m.zmp/GetUrlScript.txt | 51 ++++++++++++++++--- Genshtab/karta_gsh_250m.zmp/params.txt | 1 + Genshtab/karta_gsh_2km.zmp/GetUrlScript.txt | 51 ++++++++++++++++--- Genshtab/karta_gsh_2km.zmp/params.txt | 1 + Genshtab/karta_gsh_500m.zmp/GetUrlScript.txt | 51 ++++++++++++++++--- Genshtab/karta_gsh_500m.zmp/params.txt | 1 + Genshtab/karta_gsh_5km.zmp/GetUrlScript.txt | 51 ++++++++++++++++--- Genshtab/karta_gsh_5km.zmp/params.txt | 1 + history/5v_kavkaz.zmp/GetUrlScript.txt | 51 ++++++++++++++++--- history/5v_kavkaz.zmp/params.txt | 1 + 16 files changed, 369 insertions(+), 49 deletions(-) diff --git a/Genshtab/ggc/karta_ggc_500m.zmp/GetUrlScript.txt b/Genshtab/ggc/karta_ggc_500m.zmp/GetUrlScript.txt index 2c6e4a24..c5dcd226 100644 --- a/Genshtab/ggc/karta_ggc_500m.zmp/GetUrlScript.txt +++ b/Genshtab/ggc/karta_ggc_500m.zmp/GetUrlScript.txt @@ -1,13 +1,52 @@ +function GetCode(const url: AnsiString): Cardinal; var - r: integer; - BaseUrl: string; + VResponseCode: Cardinal; + VResponseHeader, VResponseData: AnsiString; begin - r := random(2); + Result := 1; + if Assigned(Downloader) then begin + VResponseHeader := ''; + VResponseData := ''; + VResponseCode := Downloader.DoHttpRequest(url, '', '', VResponseHeader, VResponseData); + Result := VResponseCode; + end; +end; + +var + BaseUrl: string; + code: Cardinal; + z_ok, z_no: integer; + r: integer; +begin + ResultURL := ''; + z_ok := StrToIntDef(GetBefore(';', ScriptBuffer), 1); // Максимальный масштаб, который точно есть + z_no := StrToIntDef(GetAfter(';', ScriptBuffer), 25); // Минимальный масштаб, которого точно нет + + // Масштаба нет - говорить не о чем + if getz >= z_no then exit; + // Выбор зеркала + r := random(2); case r of - 0: BaseUrl := GetURLBase; - 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + 0: BaseUrl := GetURLBase; + 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + end; + + // Проверяем наличие масштаба + if getz > z_ok then begin + code := GetCode(BaseUrl+'z'+inttostr(getz)+'/'); + + // Внимание! Если сервер вернёт 403 - code почему-то будет 0. Так что выбор "404 или что-то иное" + // Если дело дошло до проверки наличия масштаба - значит какая-то граница (z_ok / z_no) точно подвинется. + if code = 404 then z_no := getz else z_ok := getz; + + // Сохраняем актуализированные границы для последующих вызовов + ScriptBuffer := inttostr(z_ok) + ';' + inttostr(z_no); + + // Масштаба нет (о чём могли только что при проверке узнать) - говорить не о чем + if getz >= z_no then exit; end; + // Ок, качаем тайлик ResultURL:= BaseUrl+'z'+inttostr(getz)+'/'+inttostr(getx div 1024)+'/x'+inttostr(getx)+'/'+inttostr(gety div 1024)+'/y'+inttostr(gety)+'.png'; -end. \ No newline at end of file +end. diff --git a/Genshtab/ggc/karta_ggc_500m.zmp/params.txt b/Genshtab/ggc/karta_ggc_500m.zmp/params.txt index 59e65c24..5fbb0485 100644 --- a/Genshtab/ggc/karta_ggc_500m.zmp/params.txt +++ b/Genshtab/ggc/karta_ggc_500m.zmp/params.txt @@ -17,3 +17,4 @@ sradiusa=6378137 sradiusb=6378137 ContentType="image/png" MaxConnectToServerCount=1 +IsUseDownloaderInScript=1 diff --git a/Genshtab/karta_gsh_10km.zmp/GetUrlScript.txt b/Genshtab/karta_gsh_10km.zmp/GetUrlScript.txt index 9eef16e5..4f971180 100644 --- a/Genshtab/karta_gsh_10km.zmp/GetUrlScript.txt +++ b/Genshtab/karta_gsh_10km.zmp/GetUrlScript.txt @@ -1,13 +1,52 @@ +function GetCode(const url: AnsiString): Cardinal; var - r: integer; - BaseUrl: string; + VResponseCode: Cardinal; + VResponseHeader, VResponseData: AnsiString; begin - r := random(2); + Result := 1; + if Assigned(Downloader) then begin + VResponseHeader := ''; + VResponseData := ''; + VResponseCode := Downloader.DoHttpRequest(url, '', '', VResponseHeader, VResponseData); + Result := VResponseCode; + end; +end; + +var + BaseUrl: string; + code: Cardinal; + z_ok, z_no: integer; + r: integer; +begin + ResultURL := ''; + z_ok := StrToIntDef(GetBefore(';', ScriptBuffer), 1); // Максимальный масштаб, который точно есть + z_no := StrToIntDef(GetAfter(';', ScriptBuffer), 25); // Минимальный масштаб, которого точно нет + + // Масштаба нет - говорить не о чем + if getz >= z_no then exit; + // Выбор зеркала + r := random(2); case r of - 0: BaseUrl := GetURLBase; - 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + 0: BaseUrl := GetURLBase; + 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + end; + + // Проверяем наличие масштаба + if getz > z_ok then begin + code := GetCode(BaseUrl+'z'+inttostr(getz)+'/'); + + // Внимание! Если сервер вернёт 403 - code почему-то будет 0. Так что выбор "404 или что-то иное" + // Если дело дошло до проверки наличия масштаба - значит какая-то граница (z_ok / z_no) точно подвинется. + if code = 404 then z_no := getz else z_ok := getz; + + // Сохраняем актуализированные границы для последующих вызовов + ScriptBuffer := inttostr(z_ok) + ';' + inttostr(z_no); + + // Масштаба нет (о чём могли только что при проверке узнать) - говорить не о чем + if getz >= z_no then exit; end; + // Ок, качаем тайлик ResultURL:= BaseUrl+'z'+inttostr(getz)+'/'+inttostr(getx div 1024)+'/x'+inttostr(getx)+'/'+inttostr(gety div 1024)+'/y'+inttostr(gety)+'.jpg'; -end. \ No newline at end of file +end. diff --git a/Genshtab/karta_gsh_10km.zmp/params.txt b/Genshtab/karta_gsh_10km.zmp/params.txt index acdeb98b..fb3d5e1b 100644 --- a/Genshtab/karta_gsh_10km.zmp/params.txt +++ b/Genshtab/karta_gsh_10km.zmp/params.txt @@ -16,3 +16,4 @@ sradiusa=6378137 sradiusb=6378137 ContentType="image/jpeg" MaxConnectToServerCount=1 +IsUseDownloaderInScript=1 diff --git a/Genshtab/karta_gsh_1km.zmp/GetUrlScript.txt b/Genshtab/karta_gsh_1km.zmp/GetUrlScript.txt index 9eef16e5..4f971180 100644 --- a/Genshtab/karta_gsh_1km.zmp/GetUrlScript.txt +++ b/Genshtab/karta_gsh_1km.zmp/GetUrlScript.txt @@ -1,13 +1,52 @@ +function GetCode(const url: AnsiString): Cardinal; var - r: integer; - BaseUrl: string; + VResponseCode: Cardinal; + VResponseHeader, VResponseData: AnsiString; begin - r := random(2); + Result := 1; + if Assigned(Downloader) then begin + VResponseHeader := ''; + VResponseData := ''; + VResponseCode := Downloader.DoHttpRequest(url, '', '', VResponseHeader, VResponseData); + Result := VResponseCode; + end; +end; + +var + BaseUrl: string; + code: Cardinal; + z_ok, z_no: integer; + r: integer; +begin + ResultURL := ''; + z_ok := StrToIntDef(GetBefore(';', ScriptBuffer), 1); // Максимальный масштаб, который точно есть + z_no := StrToIntDef(GetAfter(';', ScriptBuffer), 25); // Минимальный масштаб, которого точно нет + + // Масштаба нет - говорить не о чем + if getz >= z_no then exit; + // Выбор зеркала + r := random(2); case r of - 0: BaseUrl := GetURLBase; - 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + 0: BaseUrl := GetURLBase; + 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + end; + + // Проверяем наличие масштаба + if getz > z_ok then begin + code := GetCode(BaseUrl+'z'+inttostr(getz)+'/'); + + // Внимание! Если сервер вернёт 403 - code почему-то будет 0. Так что выбор "404 или что-то иное" + // Если дело дошло до проверки наличия масштаба - значит какая-то граница (z_ok / z_no) точно подвинется. + if code = 404 then z_no := getz else z_ok := getz; + + // Сохраняем актуализированные границы для последующих вызовов + ScriptBuffer := inttostr(z_ok) + ';' + inttostr(z_no); + + // Масштаба нет (о чём могли только что при проверке узнать) - говорить не о чем + if getz >= z_no then exit; end; + // Ок, качаем тайлик ResultURL:= BaseUrl+'z'+inttostr(getz)+'/'+inttostr(getx div 1024)+'/x'+inttostr(getx)+'/'+inttostr(gety div 1024)+'/y'+inttostr(gety)+'.jpg'; -end. \ No newline at end of file +end. diff --git a/Genshtab/karta_gsh_1km.zmp/params.txt b/Genshtab/karta_gsh_1km.zmp/params.txt index cfcab9d5..8a7b2a52 100644 --- a/Genshtab/karta_gsh_1km.zmp/params.txt +++ b/Genshtab/karta_gsh_1km.zmp/params.txt @@ -17,4 +17,5 @@ projection=1 sradiusa=6378137 sradiusb=6378137 ContentType="image/jpeg" -MaxConnectToServerCount=1 \ No newline at end of file +MaxConnectToServerCount=1 +IsUseDownloaderInScript=1 diff --git a/Genshtab/karta_gsh_250m.zmp/GetUrlScript.txt b/Genshtab/karta_gsh_250m.zmp/GetUrlScript.txt index 9eef16e5..4f971180 100644 --- a/Genshtab/karta_gsh_250m.zmp/GetUrlScript.txt +++ b/Genshtab/karta_gsh_250m.zmp/GetUrlScript.txt @@ -1,13 +1,52 @@ +function GetCode(const url: AnsiString): Cardinal; var - r: integer; - BaseUrl: string; + VResponseCode: Cardinal; + VResponseHeader, VResponseData: AnsiString; begin - r := random(2); + Result := 1; + if Assigned(Downloader) then begin + VResponseHeader := ''; + VResponseData := ''; + VResponseCode := Downloader.DoHttpRequest(url, '', '', VResponseHeader, VResponseData); + Result := VResponseCode; + end; +end; + +var + BaseUrl: string; + code: Cardinal; + z_ok, z_no: integer; + r: integer; +begin + ResultURL := ''; + z_ok := StrToIntDef(GetBefore(';', ScriptBuffer), 1); // Максимальный масштаб, который точно есть + z_no := StrToIntDef(GetAfter(';', ScriptBuffer), 25); // Минимальный масштаб, которого точно нет + + // Масштаба нет - говорить не о чем + if getz >= z_no then exit; + // Выбор зеркала + r := random(2); case r of - 0: BaseUrl := GetURLBase; - 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + 0: BaseUrl := GetURLBase; + 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + end; + + // Проверяем наличие масштаба + if getz > z_ok then begin + code := GetCode(BaseUrl+'z'+inttostr(getz)+'/'); + + // Внимание! Если сервер вернёт 403 - code почему-то будет 0. Так что выбор "404 или что-то иное" + // Если дело дошло до проверки наличия масштаба - значит какая-то граница (z_ok / z_no) точно подвинется. + if code = 404 then z_no := getz else z_ok := getz; + + // Сохраняем актуализированные границы для последующих вызовов + ScriptBuffer := inttostr(z_ok) + ';' + inttostr(z_no); + + // Масштаба нет (о чём могли только что при проверке узнать) - говорить не о чем + if getz >= z_no then exit; end; + // Ок, качаем тайлик ResultURL:= BaseUrl+'z'+inttostr(getz)+'/'+inttostr(getx div 1024)+'/x'+inttostr(getx)+'/'+inttostr(gety div 1024)+'/y'+inttostr(gety)+'.jpg'; -end. \ No newline at end of file +end. diff --git a/Genshtab/karta_gsh_250m.zmp/params.txt b/Genshtab/karta_gsh_250m.zmp/params.txt index 50fb1cfd..6548b070 100644 --- a/Genshtab/karta_gsh_250m.zmp/params.txt +++ b/Genshtab/karta_gsh_250m.zmp/params.txt @@ -18,3 +18,4 @@ sradiusa=6378137 sradiusb=6378137 ContentType="image/jpeg" MaxConnectToServerCount=1 +IsUseDownloaderInScript=1 diff --git a/Genshtab/karta_gsh_2km.zmp/GetUrlScript.txt b/Genshtab/karta_gsh_2km.zmp/GetUrlScript.txt index 9eef16e5..4f971180 100644 --- a/Genshtab/karta_gsh_2km.zmp/GetUrlScript.txt +++ b/Genshtab/karta_gsh_2km.zmp/GetUrlScript.txt @@ -1,13 +1,52 @@ +function GetCode(const url: AnsiString): Cardinal; var - r: integer; - BaseUrl: string; + VResponseCode: Cardinal; + VResponseHeader, VResponseData: AnsiString; begin - r := random(2); + Result := 1; + if Assigned(Downloader) then begin + VResponseHeader := ''; + VResponseData := ''; + VResponseCode := Downloader.DoHttpRequest(url, '', '', VResponseHeader, VResponseData); + Result := VResponseCode; + end; +end; + +var + BaseUrl: string; + code: Cardinal; + z_ok, z_no: integer; + r: integer; +begin + ResultURL := ''; + z_ok := StrToIntDef(GetBefore(';', ScriptBuffer), 1); // Максимальный масштаб, который точно есть + z_no := StrToIntDef(GetAfter(';', ScriptBuffer), 25); // Минимальный масштаб, которого точно нет + + // Масштаба нет - говорить не о чем + if getz >= z_no then exit; + // Выбор зеркала + r := random(2); case r of - 0: BaseUrl := GetURLBase; - 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + 0: BaseUrl := GetURLBase; + 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + end; + + // Проверяем наличие масштаба + if getz > z_ok then begin + code := GetCode(BaseUrl+'z'+inttostr(getz)+'/'); + + // Внимание! Если сервер вернёт 403 - code почему-то будет 0. Так что выбор "404 или что-то иное" + // Если дело дошло до проверки наличия масштаба - значит какая-то граница (z_ok / z_no) точно подвинется. + if code = 404 then z_no := getz else z_ok := getz; + + // Сохраняем актуализированные границы для последующих вызовов + ScriptBuffer := inttostr(z_ok) + ';' + inttostr(z_no); + + // Масштаба нет (о чём могли только что при проверке узнать) - говорить не о чем + if getz >= z_no then exit; end; + // Ок, качаем тайлик ResultURL:= BaseUrl+'z'+inttostr(getz)+'/'+inttostr(getx div 1024)+'/x'+inttostr(getx)+'/'+inttostr(gety div 1024)+'/y'+inttostr(gety)+'.jpg'; -end. \ No newline at end of file +end. diff --git a/Genshtab/karta_gsh_2km.zmp/params.txt b/Genshtab/karta_gsh_2km.zmp/params.txt index 381abb51..14f1f8ad 100644 --- a/Genshtab/karta_gsh_2km.zmp/params.txt +++ b/Genshtab/karta_gsh_2km.zmp/params.txt @@ -17,3 +17,4 @@ sradiusb=6378137 DefHotKey=50 ContentType="image/jpeg" MaxConnectToServerCount=1 +IsUseDownloaderInScript=1 diff --git a/Genshtab/karta_gsh_500m.zmp/GetUrlScript.txt b/Genshtab/karta_gsh_500m.zmp/GetUrlScript.txt index 9eef16e5..4f971180 100644 --- a/Genshtab/karta_gsh_500m.zmp/GetUrlScript.txt +++ b/Genshtab/karta_gsh_500m.zmp/GetUrlScript.txt @@ -1,13 +1,52 @@ +function GetCode(const url: AnsiString): Cardinal; var - r: integer; - BaseUrl: string; + VResponseCode: Cardinal; + VResponseHeader, VResponseData: AnsiString; begin - r := random(2); + Result := 1; + if Assigned(Downloader) then begin + VResponseHeader := ''; + VResponseData := ''; + VResponseCode := Downloader.DoHttpRequest(url, '', '', VResponseHeader, VResponseData); + Result := VResponseCode; + end; +end; + +var + BaseUrl: string; + code: Cardinal; + z_ok, z_no: integer; + r: integer; +begin + ResultURL := ''; + z_ok := StrToIntDef(GetBefore(';', ScriptBuffer), 1); // Максимальный масштаб, который точно есть + z_no := StrToIntDef(GetAfter(';', ScriptBuffer), 25); // Минимальный масштаб, которого точно нет + + // Масштаба нет - говорить не о чем + if getz >= z_no then exit; + // Выбор зеркала + r := random(2); case r of - 0: BaseUrl := GetURLBase; - 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + 0: BaseUrl := GetURLBase; + 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + end; + + // Проверяем наличие масштаба + if getz > z_ok then begin + code := GetCode(BaseUrl+'z'+inttostr(getz)+'/'); + + // Внимание! Если сервер вернёт 403 - code почему-то будет 0. Так что выбор "404 или что-то иное" + // Если дело дошло до проверки наличия масштаба - значит какая-то граница (z_ok / z_no) точно подвинется. + if code = 404 then z_no := getz else z_ok := getz; + + // Сохраняем актуализированные границы для последующих вызовов + ScriptBuffer := inttostr(z_ok) + ';' + inttostr(z_no); + + // Масштаба нет (о чём могли только что при проверке узнать) - говорить не о чем + if getz >= z_no then exit; end; + // Ок, качаем тайлик ResultURL:= BaseUrl+'z'+inttostr(getz)+'/'+inttostr(getx div 1024)+'/x'+inttostr(getx)+'/'+inttostr(gety div 1024)+'/y'+inttostr(gety)+'.jpg'; -end. \ No newline at end of file +end. diff --git a/Genshtab/karta_gsh_500m.zmp/params.txt b/Genshtab/karta_gsh_500m.zmp/params.txt index 35df78e8..be724bca 100644 --- a/Genshtab/karta_gsh_500m.zmp/params.txt +++ b/Genshtab/karta_gsh_500m.zmp/params.txt @@ -17,3 +17,4 @@ sradiusa=6378137 sradiusb=6378137 ContentType="image/jpeg" MaxConnectToServerCount=1 +IsUseDownloaderInScript=1 diff --git a/Genshtab/karta_gsh_5km.zmp/GetUrlScript.txt b/Genshtab/karta_gsh_5km.zmp/GetUrlScript.txt index 9eef16e5..4f971180 100644 --- a/Genshtab/karta_gsh_5km.zmp/GetUrlScript.txt +++ b/Genshtab/karta_gsh_5km.zmp/GetUrlScript.txt @@ -1,13 +1,52 @@ +function GetCode(const url: AnsiString): Cardinal; var - r: integer; - BaseUrl: string; + VResponseCode: Cardinal; + VResponseHeader, VResponseData: AnsiString; begin - r := random(2); + Result := 1; + if Assigned(Downloader) then begin + VResponseHeader := ''; + VResponseData := ''; + VResponseCode := Downloader.DoHttpRequest(url, '', '', VResponseHeader, VResponseData); + Result := VResponseCode; + end; +end; + +var + BaseUrl: string; + code: Cardinal; + z_ok, z_no: integer; + r: integer; +begin + ResultURL := ''; + z_ok := StrToIntDef(GetBefore(';', ScriptBuffer), 1); // Максимальный масштаб, который точно есть + z_no := StrToIntDef(GetAfter(';', ScriptBuffer), 25); // Минимальный масштаб, которого точно нет + + // Масштаба нет - говорить не о чем + if getz >= z_no then exit; + // Выбор зеркала + r := random(2); case r of - 0: BaseUrl := GetURLBase; - 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + 0: BaseUrl := GetURLBase; + 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + end; + + // Проверяем наличие масштаба + if getz > z_ok then begin + code := GetCode(BaseUrl+'z'+inttostr(getz)+'/'); + + // Внимание! Если сервер вернёт 403 - code почему-то будет 0. Так что выбор "404 или что-то иное" + // Если дело дошло до проверки наличия масштаба - значит какая-то граница (z_ok / z_no) точно подвинется. + if code = 404 then z_no := getz else z_ok := getz; + + // Сохраняем актуализированные границы для последующих вызовов + ScriptBuffer := inttostr(z_ok) + ';' + inttostr(z_no); + + // Масштаба нет (о чём могли только что при проверке узнать) - говорить не о чем + if getz >= z_no then exit; end; + // Ок, качаем тайлик ResultURL:= BaseUrl+'z'+inttostr(getz)+'/'+inttostr(getx div 1024)+'/x'+inttostr(getx)+'/'+inttostr(gety div 1024)+'/y'+inttostr(gety)+'.jpg'; -end. \ No newline at end of file +end. diff --git a/Genshtab/karta_gsh_5km.zmp/params.txt b/Genshtab/karta_gsh_5km.zmp/params.txt index 288d3cb9..6f1a4aaf 100644 --- a/Genshtab/karta_gsh_5km.zmp/params.txt +++ b/Genshtab/karta_gsh_5km.zmp/params.txt @@ -16,3 +16,4 @@ sradiusa=6378137 sradiusb=6378137 ContentType="image/jpeg" MaxConnectToServerCount=1 +IsUseDownloaderInScript=1 diff --git a/history/5v_kavkaz.zmp/GetUrlScript.txt b/history/5v_kavkaz.zmp/GetUrlScript.txt index 9eef16e5..4f971180 100644 --- a/history/5v_kavkaz.zmp/GetUrlScript.txt +++ b/history/5v_kavkaz.zmp/GetUrlScript.txt @@ -1,13 +1,52 @@ +function GetCode(const url: AnsiString): Cardinal; var - r: integer; - BaseUrl: string; + VResponseCode: Cardinal; + VResponseHeader, VResponseData: AnsiString; begin - r := random(2); + Result := 1; + if Assigned(Downloader) then begin + VResponseHeader := ''; + VResponseData := ''; + VResponseCode := Downloader.DoHttpRequest(url, '', '', VResponseHeader, VResponseData); + Result := VResponseCode; + end; +end; + +var + BaseUrl: string; + code: Cardinal; + z_ok, z_no: integer; + r: integer; +begin + ResultURL := ''; + z_ok := StrToIntDef(GetBefore(';', ScriptBuffer), 1); // Максимальный масштаб, который точно есть + z_no := StrToIntDef(GetAfter(';', ScriptBuffer), 25); // Минимальный масштаб, которого точно нет + + // Масштаба нет - говорить не о чем + if getz >= z_no then exit; + // Выбор зеркала + r := random(2); case r of - 0: BaseUrl := GetURLBase; - 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + 0: BaseUrl := GetURLBase; + 1: BaseUrl := RegExprReplaceMatchSubStr(GetURLBase, '91.237.82.95:8088', 'maps.melda.ru'); + end; + + // Проверяем наличие масштаба + if getz > z_ok then begin + code := GetCode(BaseUrl+'z'+inttostr(getz)+'/'); + + // Внимание! Если сервер вернёт 403 - code почему-то будет 0. Так что выбор "404 или что-то иное" + // Если дело дошло до проверки наличия масштаба - значит какая-то граница (z_ok / z_no) точно подвинется. + if code = 404 then z_no := getz else z_ok := getz; + + // Сохраняем актуализированные границы для последующих вызовов + ScriptBuffer := inttostr(z_ok) + ';' + inttostr(z_no); + + // Масштаба нет (о чём могли только что при проверке узнать) - говорить не о чем + if getz >= z_no then exit; end; + // Ок, качаем тайлик ResultURL:= BaseUrl+'z'+inttostr(getz)+'/'+inttostr(getx div 1024)+'/x'+inttostr(getx)+'/'+inttostr(gety div 1024)+'/y'+inttostr(gety)+'.jpg'; -end. \ No newline at end of file +end. diff --git a/history/5v_kavkaz.zmp/params.txt b/history/5v_kavkaz.zmp/params.txt index 2129747f..3a7b198f 100644 --- a/history/5v_kavkaz.zmp/params.txt +++ b/history/5v_kavkaz.zmp/params.txt @@ -16,3 +16,4 @@ Ext=.jpg defaultContentType=image/jpeg ContentType="image/jpeg" MaxConnectToServerCount=1 +IsUseDownloaderInScript=1