SASGIS

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

SAS.Wiki

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

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

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


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

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

описание_паскаль_скриптов [18/11/2013 10:56]
89.175.48.164 [Описание скриптов Pascal]
описание_паскаль_скриптов [08/02/2021 18:25] (текущий)
radioxoma [Использование автозамены плейсхолдеров]
Строка 11: Строка 11:
  
 Переменные,​ доступные в скриптах:​ Переменные,​ доступные в скриптах:​
-  * **GetURLBase** (String) — неизменная часть адреса ссылки на тайлы карты, соответствует параметру DefURLBase в params.txt +  * **GetURLBase** (AnsiString) — неизменная часть адреса ссылки на тайлы карты, соответствует параметру DefURLBase в params.txt 
-  * **RequestHead** (String) — заголовки,​ которые будут переданы серверу при запросе (проинициализирована значением RequestHead из params.txt) +  * **RequestHead** (AnsiString) — заголовки,​ которые будут переданы серверу при запросе (проинициализирована значением RequestHead из params.txt) 
-  * **Version** (String) — версия тайлов,​ соответствует параметру Version в params.txt  +  * **Version** (AnsiString) — версия тайлов,​ соответствует параметру Version в params.txt  
-  * **Lang** (String) — язык, соответствует языку интерфейса программы. Принимает значения '​en',​ '​ru',​ '​uk'​+  * **Lang** (AnsiString) — язык, соответствует языку интерфейса программы. Принимает значения '​en',​ '​ru',​ '​uk'​
   * **GetX, GetY, GetZ** (Integer) — соответственно номер тайла по горизонтали (слева),​ по вертикали (сверху),​ масштаб (от 1 до 24)   * **GetX, GetY, GetZ** (Integer) — соответственно номер тайла по горизонтали (слева),​ по вертикали (сверху),​ масштаб (от 1 до 24)
   * **GetLLon, GetRLon, GetTLat, GetBLat** (Double) — соответственно долгота левой границы тайла, правой границы,​ широта верхней границы,​ нижней границы   * **GetLLon, GetRLon, GetTLat, GetBLat** (Double) — соответственно долгота левой границы тайла, правой границы,​ широта верхней границы,​ нижней границы
   * **GetLMetr, GetRMetr, GetTMetr, GetBMetr** (Double) — то же в метрах   * **GetLMetr, GetRMetr, GetTMetr, GetBMetr** (Double) — то же в метрах
-  * **ResponseHead** (String) — заголовки ответа сервера от предыдущего запроса +  * **ResponseHead** (AnsiString) — заголовки ответа сервера от предыдущего запроса 
-  * **ScriptBuffer** (String) — буфер, любая информация передаваемая между скриптами +  * **ScriptBuffer** (AnsiString) — буфер, любая информация передаваемая между скриптами 
-  * **ResultURL** (String) — сюда нужно сформировать ссылку на тайл +  * **ResultURL** (AnsiString) — сюда нужно сформировать ссылку на тайл 
-  * **PostData** (String) — если в скрипте в строковую переменную PostData поместить какие-то данные,​ то будет выполнен POST запрос вместо GET запроса.+  * **PostData** (AnsiString) — если в скрипте в строковую переменную PostData поместить какие-то данные,​ то будет выполнен POST запрос вместо GET запроса
  
-Функции для ​работы со строками, доступные в скриптах+Интерфейсные переменные, доступные в скриптах*:​ 
-  ​function **Pos**(const SubStr, StrString): Integer; +  * **Downloader** (ISimpleHttpDownloader— выполнение HTTP запросов внутри скрипта. Доступно только при включённой опции ​**IsUseDownloaderInScript** в params.txt 
-  * function ​**Copy**(Str: String; StartPos, Count: Integer): String; +  * **DefProjConverter** (IProjConverter— конвертер координат в проекцииопределённой в params.txt ​(параметр ​**Proj4Args**). Доступна только при наличии ​**proj.dll** 
-  ​function ​**Length**(const Str: String): Integer; +  * **ProjFactory** (IProjConverterFactory— фабрика,​ для создания конвертеров координат различных проекций. Доступна только при наличии ​**proj.dll** 
-  * function ​**GetAfter**(SubStr, Str: String): String; +  * **Converter** (ICoordConverter— набор функций для работы с координатами в текущей проекции 
-  * function **GetBefore**(SubStrStr: 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:+* - эти переменные могут быть ​не инициализированы (т.е. = nil). Перед использованием их необходимо проверять при помощи функции **Assigned**. 
 + 
 +Функции и процедуры,​ доступные в скриптах:​ 
 +  * function **Assigned**(const I: LongInt): Boolean; 
 +  * function **IntToStr**(const i: Int64): String; 
 +  * function **StrToInt**(const s: String): LongInt; 
 +  * function **StrToIntDef**(const s: String; const def: LongInt): LongInt; 
 +  * function **Copy**(const s: AnyString; const iFrom: LongInt; const iCount: LongInt): AnyString;​ 
 +  * function **Pos**(const SubStr: AnyString; const S: AnyString): LongInt; 
 +  * procedure **Delete**(var s: AnyString; const ifrom: LongInt; const icount: LongInt); 
 +  * procedure **Insert**(const s: AnyString; var s2: AnyString; const iPos: LongInt); 
 +  * function **GetArrayLength**(const arr): LongInt; 
 +  * procedure **SetArrayLength**(var arr; const count: LongInt); 
 +  * function **StrGet**(var S: String; const I: LongInt): Char; 
 +  * function **StrGet2**(const S: String; const I: LongInt): Char; 
 +  * procedure **StrSet**(const c: Char; const I: LongInt; var s: String); 
 +  * function **WStrGet**(var S: AnyString; const I: LongInt): WideChar; 
 +  * procedure **WStrSet**(const c: AnyString; const I: LongInt; var s: AnyString);​ 
 +  * function **VarArrayGet**(var S: Variant; const I: LongInt): Variant; 
 +  * procedure **VarArraySet**(const c: Variant; const I: LongInt; var s: Variant); 
 +  * function **AnsiUppercase**(const s: String): String; 
 +  * function **AnsiLowercase**(const s: String): String; 
 +  * function **Uppercase**(const s: AnyString): AnyString;​ 
 +  * function **Lowercase**(const s: AnyString): AnyString;​ 
 +  * function **Trim**(const s: AnyString): AnyString;​ 
 +  * function **Length**(const s): LongInt; 
 +  * procedure **SetLength**(var s; const NewLength: LongInt); 
 +  * function **Low**(const x): Int64; 
 +  * function **High**(const x): Int64; 
 +  * procedure **Dec**(var x); 
 +  * procedure **Inc**(var x); 
 +  * procedure **Include**(var s; const m); 
 +  * procedure **Exclude**(var s; const m); 
 +  * function **Sin**(const e: Extended): Extended; 
 +  * function **Cos**(const e: Extended): Extended; 
 +  * function **Sqrt**(const e: Extended): Extended; 
 +  * function **Round**(const e: Extended): LongInt; 
 +  * function **Trunc**(const e: Extended): LongInt; 
 +  * function **Int**(const e: Extended): Extended; 
 +  * function **Pi**: Extended; 
 +  * function **Abs**(const e: Extended): Extended; 
 +  * function **StrToFloat**(const s: String): Extended; 
 +  * function **FloatToStr**(const e: Extended): String; 
 +  * function **Padl**(const s: AnyString; const I: LongInt): AnyString;​ 
 +  * function **Padr**(const s: AnyString; const I: LongInt): AnyString;​ 
 +  * function **Padz**(const s: AnyString; const I: LongInt): AnyString;​ 
 +  * function **Replicate**(const c: Char; const I: LongInt): String; 
 +  * function **StringOfChar**(const c: Char; const I: LongInt): String; 
 +  * function **Unassigned**:​ Variant; 
 +  * function **VarIsEmpty**(const V: Variant): Boolean; 
 +  * function **Null**: Variant; 
 +  * function **VarIsNull**(const V: Variant): Boolean; 
 +  * function **VarType**(const V: Variant): Word; 
 +  * procedure **RaiseLastException**;​ 
 +  * procedure **RaiseException**(const Ex: TIFException;​ const Param: String); 
 +  * function **ExceptionType**:​ TIFException;​ 
 +  * function **ExceptionParam**:​ String; 
 +  * function **ExceptionProc**:​ LongWord; 
 +  * function **ExceptionPos**:​ LongWord; 
 +  * function **ExceptionToString**(const er: TIFException;​ const Param: String): String; 
 +  * function **StrToInt64**(const s: String): Int64; 
 +  * function **Int64ToStr**(const i: Int64): String; 
 +  * function **StrToInt64Def**(const s: String; const def: Int64): Int64; 
 +  * function **SizeOf**(const Data): LongInt; 
 +  * function **IDispatchInvoke**(const Self: IDispatch; const PropertySet:​ Boolean; const Name: String; const Par: !OPENARRAYOFVARIANT):​ Variant; 
 +  * function **Random**(const X: LongInt): LongInt; 
 +  * function **RandomRange**(const AFrom: LongInt; const ATo: LongInt): LongInt; 
 +  * function **RoundEx**(const chislo: Double; const Precision: LongInt): String; 
 +  * function **Power**(const Base: Extended; const Exponent: Extended): Extended; 
 +  * function **IntPower**(const Base: Extended; const Exponent: LongInt): Extended; 
 +  * function **IntToHex**(const Value: LongInt; const Digits: LongInt): String; 
 +  * function **Ceil**(const X: Extended): LongInt; 
 +  * function **Floor**(const X: Extended): LongInt; 
 +  * function **Log2**(const X: Extended): Extended; 
 +  * function **Ln**(const X: Extended): Extended; 
 +  * function **Max**(const A: LongInt; const B: LongInt): LongInt; 
 +  * function **MaxExt**(const A: Extended; const B: Extended): Extended; 
 +  * function **Min**(const A: LongInt; const B: LongInt): LongInt; 
 +  * function **MinExt**(const A: Extended; const B: Extended): Extended; 
 +  * function **GetAfter**(const SubStr: AnsiString; const Str: AnsiString):​ AnsiString;​ 
 +  * function **GetBefore**(const SubStr: AnsiString; const Str: AnsiString):​ AnsiString;​ 
 +  * function **GetBetween**(const Str: AnsiString; const After: AnsiString; const Before: AnsiString):​ AnsiString;​ 
 +  * function **SubStrPos**(const Str: AnsiString; const SubStr: AnsiString; const FromPos: LongInt): LongInt; 
 +  * function **RegExprGetMatchSubStr**(const Str: AnsiString; const MatchExpr: AnsiString; const AMatchID: LongInt): AnsiString;​ 
 +  * function **RegExprReplaceMatchSubStr**(const Str: AnsiString; const MatchExpr: AnsiString; const Replace: AnsiString):​ AnsiString;​ 
 +  * function **GetNumberAfter**(const ASubStr: AnsiString; const AText: AnsiString):​ AnsiString;​ 
 +  * function **GetDiv3Path**(const ANumber: AnsiString):​ AnsiString;​ 
 +  * function **StringReplace**(const S: AnsiString; const OldPattern: AnsiString; const NewPattern: AnsiString; const ReplaceAll: Boolean; const IgnoreCase: Boolean): AnsiString;​ 
 +  * function **SetHeaderValue**(const AHeaders: AnsiString; const AName: AnsiString; const AValue: AnsiString):​ AnsiString;​ 
 +  * function **GetHeaderValue**(const AHeaders: AnsiString; const AName: AnsiString):​ AnsiString;​ 
 +  * function **GetUnixTime**:​ Int64; 
 +  * function **SaveToLocalFile**(const AFullLocalFilename:​ AnsiString; const AData: AnsiString):​ LongInt; 
 +  * function **FileExists**(const FileName: AnsiString)Boolean;
   * function **Base64Encode**(const Data: AnsiString):​ AnsiString;   * function **Base64Encode**(const Data: AnsiString):​ AnsiString;
   * function **Base64UrlEncode**(const Data: AnsiString):​ AnsiString;   * function **Base64UrlEncode**(const Data: AnsiString):​ AnsiString;
   * function **Base64Decode**(const Data: AnsiString):​ AnsiString;   * function **Base64Decode**(const Data: AnsiString):​ AnsiString;
- +  ​* function **TemplateToUrl**(const ATmpl: String): String;
-Другие доступные функции:​ +
-  ​* 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 запросов из скрипта ===== ===== Выполнение HTTP запросов из скрипта =====
  
-В Zmp должно быть включена возможность выполнять ​http запросы IsUseDownloaderInScript=1+В zmp должно быть включена возможность выполнять ​HTTP запросы ​**IsUseDownloaderInScript=1**
  
 В скрипте можно пользоваться переменной **Downloader**,​ если она не пустая,​ то можно выполнять DoHttpRequest В скрипте можно пользоваться переменной **Downloader**,​ если она не пустая,​ то можно выполнять DoHttpRequest
  
-Например ​так:+<code delphi>​ 
 +  ISimpleHttpDownloader = interface ​    
 +    function DoHttpRequest( 
 +      const ARequestUrl,​ ARequestHeader,​ APostData: AnsiString;​ 
 +      out AResponseHeader,​ AResponseData:​ AnsiString 
 +    ): Cardinal; 
 +  end; 
 +</​code>​ 
 + 
 +Пример:
  
 <code delphi> <code delphi>
Строка 63: Строка 152:
 begin  begin 
   ​   ​
-  if (Downloader ​<> nil) then begin+  if Assigned(Downloader) then begin
     VRequestUrl := '​http://​google.com/';​     VRequestUrl := '​http://​google.com/';​
     VRequestHeader := '';​     VRequestHeader := '';​
Строка 84: Строка 173:
 ===== Работа с хитрыми системами координат ===== ===== Работа с хитрыми системами координат =====
  
-Если в папке с программой присутствует ​proj480.dll, то в скриптах будут доступны такие переменные+Если в папке с программой присутствует ​proj.dll, то в скриптах будут доступны такие переменные
   * переменная **DefProjConverter** с объектом типа:   * переменная **DefProjConverter** с объектом типа:
 <code delphi> <code delphi>
Строка 128: Строка 217:
 </​code>​ </​code>​
  
 +===== Работа с координатами =====
 +
 +<code delphi>
 +  ICoordConverter = interface
 +    // Преобразует позицию тайла на заданном зуме в георафически координаты его верхнего левого угла
 +    function Pos2LonLat(const XY: TPoint; AZoom: byte): TDoublePoint;​ stdcall;
 +    // Преобразует георафические координаты в позицию тайла на заданном зуме накрывающего данные координаты
 +    function LonLat2Pos(const Ll: TDoublePoint;​ AZoom: byte): Tpoint; stdcall;
 +
 +    // метрические координаты
 +    function LonLat2Metr(const Ll: TDoublePoint):​ TDoublePoint;​ stdcall;
 +    function Metr2LonLat(const Mm: TDoublePoint):​ TDoublePoint;​ stdcall;
 +
 +    // Возвращает количество тайлов в заданном зуме
 +    function TilesAtZoom(const AZoom: byte): Longint; stdcall;
 +    // Возвращает общее количество пикселей на заданном зуме
 +    function PixelsAtZoom(const AZoom: byte): Longint; stdcall;
 +
 +    // Преобразует позицию тайла заданного зума в координаты пиксела его левого верхнего угла
 +    function TilePos2PixelPos(const XY: TPoint; const AZoom: byte): TPoint; stdcall;
 +    // Преобразует позицию тайла заданного зума в номера пикселов его углов на заданном зуме
 +    function TilePos2PixelRect(const XY: TPoint; const AZoom: byte): TRect; stdcall;
 +  end;
 +</​code>​
 +
 +Пример:​
 +
 +<code delphi>
 +var
 +  VTilesCount:​ Integer;
 +begin
 +  if Assigned(Converter) then begin
 +    VTilesCount := Converter.TilesAtZoom(GetZ);​
 +    // производим расчёты и генерируем url
 +  end else begin
 +    ResultURL := '';​
 +  end;
 +end.
 +</​code>​
 +
 +
 +===== Использование автозамены плейсхолдеров =====
 +
 +Если файла **GetUrlScript.txt** нет или он пуст (в том числе не содержит ни пробелов,​ ни переводов строк),​ то будет выполнен скрипт,​ который автоматически заменяет плейсхолдеры найденные в **GetURLBase**. Именно в этом формате он применяется при [[простой_пример_с_плейсхолдерами |упрощенном добавлении карт]]). Однако,​ если вам потребуется,​ то вы можете использовать эту функцию в собственных скриптах.
 +
 +<code delphi>
 +begin
 +  ResultUrl := TemplateToUrl(GetURLBase);​
 +end.
 +</​code>​