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;

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

  • 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, то в скриптах будут доступны такие переменные

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