SASGIS

Веб-картография и навигация

SAS.Wiki

Веб-картография и навигация

Инструменты пользователя

Инструменты сайта


описание_паскаль_скриптов

Это старая версия документа.


Главная страница

Функции программы

Описание скриптов Pascal

Файл 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;

Функции для кодировани/декодирования Base64:

  • function Base64Encode(const Data: AnsiString): AnsiString;
  • function Base64UrlEncode(const Data: AnsiString): AnsiString;
  • function Base64Decode(const Data: AnsiString): AnsiString;

Другие доступные функции:

  • function Random(Value: Integer): Integer;
  • function GetUnixTime: Int64;
  • function RoundEx(Value: Double; Precision: Integer): String;
  • function IntPower(const Base: Extended; const Exponent: Integer): Extended register;
  • function IntToHex(Value: Integer; Digits: Integer): String;

Выполнение HTTP запросов из скрипта

В Zmp должно быть включена возможность выполнять http запросы IsUseDownloaderInScript=1 В скрипте можно пользоваться переменной Downloader, если она не пустая, то можно выполнять DoHttpRequest Например так:

var
  VRequestUrl, VRequestHeader, VPostData: string;
  VResponseCode: Cardinal;
  VResponseHeader, VResponseData: string; 
begin 
 
  if (Downloader <> nil) then begin
    VRequestUrl := 'http://google.com/';
    VRequestHeader := '';
    VPostData := '';
    VResponseHeader := '';
    VResponseData := '';
 
    VResponseCode := Downloader.DoHttpRequest(VRequestUrl, VRequestHeader, VPostData, VResponseHeader, VResponseData);
 
    if VResponseCode = 200 then begin
      ScriptBuffer := VResponseData;
    end else begin
      ScriptBuffer := VResponseHeader;
    end; 
  end;
end.

Работа с хитрыми системами координат

Если в папке с программой присутствует proj480.dll, то в скриптах будут доступны такие переменные

  • переменная DefProjConverter с объектом типа:
  IProjConverter = interface
    function LonLat2XY(const AProjLP: TDoublePoint): TDoublePoint;
    function XY2LonLat(const AProjXY: TDoublePoint): TDoublePoint;
  end;

будет инициализирована, если парметр Proj4Args в zmp-файле равен правильной строке инициализации библиотеки proj, иначе там будет nil.

  • переменная ProjFactory с объектом типа:
  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.
Перевод этой страницы: