Это старая версия документа.
Файл GetUrlScript.txt содержит скрипт, написанный на Pascal, и предназначен для формирования параметров запроса тайла, к которым относятся:
полный адрес ссылки на тайлы данной карты;
HTTP-заголовки, передаваемые серверу при запросе тайла карты.
Переменные, доступные в скриптах:
GetURLBase (string) - неизменная часть адреса ссылки на тайлы карты, соответствует параметру DefURLBase в params.txt
RequestHead (string) - заголовки, которые будут переданы серверу при запросе (проинициализирована значением RequestHead из params.txt)
Version (string) - версия тайлов, соответствует параметру Version в params.txt
Lang (string) - язык, соответствует языку интерфейса программы. Принимает значения 'en', 'ru', 'uk'
GetX, GetY, GetZ (integer) - соответственно номер тайла по горизонтали (слева), по вертикали (сверху), масштаб (от 1 до 24)
GetLLon, GetRLon, GetTLat, GetBLat (double) - соответственно долгота левой границы тайла, правой границы, широта верхней границы, нижней границы
GetLMetr, GetRMetr, GetTMetr, GetBMetr (double) - то же в метрах
ResponseHead (string) - заголовки ответа сервера от предыдущего запроса
ScriptBuffer (string) - буфер, любая информация передаваемая между скриптами
ResultURL (string) - сюда нужно сформировать ссылку на тайл
PostData (string) - Если в скрипте в строковую переменную PostData поместить какие-то данные, то будет выполнен POST запрос вместо GET запроса.
Функции для работы со строками, доступные в скриптах:
function Pos(const SubStr, Str: string): Integer;
function Copy(Str: string; StartPos, Count: Integer): string;
function Length(const Str: string): Integer;
function GetAfter(SubStr, Str: string): string;
function GetBefore(SubStr, Str: string): string;
function GetBetween(Str, After, Before: string): string;
function SubStrPos(const Str, SubStr: AnsiString; FromPos: Integer): Integer;
function RegExprGetMatchSubStr(const Str, MatchExpr: string; MatchID: Integer): string;
function RegExprReplaceMatchSubStr(const Str, MatchExpr, Replace: string): string;
function SetHeaderValue(Headers, Name, Value: string): string;
function GetHeaderValue(Headers, Name: string): string;
Другие доступные функции:
function Random(x:integer):integer'
function GetUnixTime:int64'
function RoundEx(chislo: Double; Precision: Integer): string'
function IntPower(const Base: Extended; const Exponent: Integer): Extended register'
function IntToHex(Value: Integer; Digits: Integer): string'
Работа с хитрыми системами координат
Если в папке с программой присутствует proj480.dll, то в скриптах будут доступны такие переменные
IProjConverter = interface
function LonLat2XY(const AProjLP: TDoublePoint): TDoublePoint;
function XY2LonLat(const AProjXY: TDoublePoint): TDoublePoint;
end;
будет инициализирована, если парметр Proj4Args в zmp-файле равен правильной строке инициализации библиотеки proj, иначе там будет nil.
IProjConverterFactory = interface
function GetByEPSG(const AEPSG: Integer): IProjConverter;
function GetByInitString(const AArgs: String): IProjConverter;
end;
Позволяет создавать конвертеры по требованию, например с учетом зон и тд.
Например так:
var
VEPSG: Integer;
Proj4Conv: IProjConverter;
begin
// use EPSG:28483 aka EPSG:2513
// check bounds (EPSG:28483 between 132E and 138E) and correct EPSG (inc or dec)
VEPSG := 28483;
if (GetLLon<132) then begin
VEPSG := VEPSG - 1;
end else if (GetLLon>138) then begin
VEPSG := VEPSG + 1;
end;
// get proj4 converter
Proj4Conv := ProjFactory.GetByEPSG(VEPSG-(28483-2513));
if Assigned(Proj4Conv) then begin
// Тут генерируем Url
end else begin
// not available
ResultURL := '';
end;
end.