SASGIS

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

SAS.Wiki

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

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

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


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

Различия

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

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

описание_паскаль_скриптов [05/04/2015 12:33]
zed
описание_паскаль_скриптов [08/02/2021 18:25] (текущий)
radioxoma [Использование автозамены плейсхолдеров]
Строка 21: Строка 21:
   * **ScriptBuffer** (AnsiString) — буфер, любая информация передаваемая между скриптами   * **ScriptBuffer** (AnsiString) — буфер, любая информация передаваемая между скриптами
   * **ResultURL** (AnsiString) — сюда нужно сформировать ссылку на тайл   * **ResultURL** (AnsiString) — сюда нужно сформировать ссылку на тайл
-  * **PostData** (AnsiString) — если в скрипте в строковую переменную PostData поместить какие-то данные,​ то будет выполнен POST запрос вместо GET запроса.+  * **PostData** (AnsiString) — если в скрипте в строковую переменную PostData поместить какие-то данные,​ то будет выполнен POST запрос вместо GET запроса 
 + 
 +Интерфейсные переменные,​ доступные в скриптах*:​ 
 +  * **Downloader** (ISimpleHttpDownloader) — выполнение HTTP запросов внутри скрипта. Доступно только при включённой опции **IsUseDownloaderInScript** в params.txt 
 +  * **DefProjConverter** (IProjConverter) — конвертер координат в проекции,​ определённой в params.txt (параметр **Proj4Args**). Доступна только при наличии **proj.dll** 
 +  * **ProjFactory** (IProjConverterFactory) — фабрика,​ для создания конвертеров координат различных проекций. Доступна только при наличии **proj.dll** 
 +  * **Converter** (ICoordConverter) — набор функций для работы с координатами в текущей проекции 
 +Описание интерфейсов и примеры их использования см. ниже. 
 + 
 +* - эти переменные могут быть не инициализированы (т.е. = nil). Перед использованием их необходимо проверять при помощи функции **Assigned**.
  
 Функции и процедуры,​ доступные в скриптах:​ Функции и процедуры,​ доступные в скриптах:​
-    ​* function **Assigned**(const I: LongInt): Boolean; +  ​* function **Assigned**(const I: LongInt): Boolean; 
-    * function **IntToStr**(const i: Int64): String; +  * function **IntToStr**(const i: Int64): String; 
-    * function **StrToInt**(const s: String): LongInt; +  * function **StrToInt**(const s: String): LongInt; 
-    * function **StrToIntDef**(const s: String; const def: LongInt): LongInt; +  * function **StrToIntDef**(const s: String; const def: LongInt): LongInt; 
-    * function **Copy**(const s: AnsiString; const iFrom: LongInt; const iCount: LongInt): ​AnsiString+  * function **Copy**(const s: AnyString; const iFrom: LongInt; const iCount: LongInt): ​AnyString
-    * function **Pos**(const SubStr: ​AnsiString; const S: AnsiString): LongInt; +  * function **Pos**(const SubStr: ​AnyString; const S: AnyString): LongInt; 
-    * procedure **Delete**(var s: AnsiString; const ifrom: LongInt; const icount: LongInt); +  * procedure **Delete**(var s: AnyString; const ifrom: LongInt; const icount: LongInt); 
-    * procedure **Insert**(const s: AnsiString; var s2: AnsiString; const iPos: LongInt); +  * procedure **Insert**(const s: AnyString; var s2: AnyString; const iPos: LongInt); 
-    * function **GetArrayLength**(const arr): LongInt; +  * function **GetArrayLength**(const arr): LongInt; 
-    * procedure **SetArrayLength**(var arr; const count: LongInt); +  * procedure **SetArrayLength**(var arr; const count: LongInt); 
-    * function **StrGet**(var S: String; const I: LongInt): Char; +  * function **StrGet**(var S: String; const I: LongInt): Char; 
-    * function **StrGet2**(const 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); +  * procedure **StrSet**(const c: Char; const I: LongInt; var s: String); 
-    * function **WStrGet**(var S: AnsiString; const I: LongInt): WideChar; +  * function **WStrGet**(var S: AnyString; const I: LongInt): WideChar; 
-    * procedure **WStrSet**(const c: AnsiString; const I: LongInt; var s: AnsiString); +  * procedure **WStrSet**(const c: AnyString; const I: LongInt; var s: AnyString); 
-    * function **VarArrayGet**(var S: Variant; const I: LongInt): Variant; +  * function **VarArrayGet**(var S: Variant; const I: LongInt): Variant; 
-    * procedure **VarArraySet**(const c: Variant; const I: LongInt; var s: Variant); +  * procedure **VarArraySet**(const c: Variant; const I: LongInt; var s: Variant); 
-    * function **AnsiUppercase**(const s: String): String; +  * function **AnsiUppercase**(const s: String): String; 
-    * function **AnsiLowercase**(const s: String): String; +  * function **AnsiLowercase**(const s: String): String; 
-    * function **Uppercase**(const s: AnsiString): AnsiString+  * function **Uppercase**(const s: AnyString): AnyString
-    * function **Lowercase**(const s: AnsiString): AnsiString+  * function **Lowercase**(const s: AnyString): AnyString
-    * function **Trim**(const s: AnsiString): AnsiString+  * function **Trim**(const s: AnyString): AnyString
-    * function **Length**(const s): LongInt; +  * function **Length**(const s): LongInt; 
-    * procedure **SetLength**(var s; const NewLength: LongInt); +  * procedure **SetLength**(var s; const NewLength: LongInt); 
-    * function **Low**(const x): Int64; +  * function **Low**(const x): Int64; 
-    * function **High**(const x): Int64; +  * function **High**(const x): Int64; 
-    * procedure **Dec**(var x); +  * procedure **Dec**(var x); 
-    * procedure **Inc**(var x); +  * procedure **Inc**(var x); 
-    * procedure **Include**(var s; const m); +  * procedure **Include**(var s; const m); 
-    * procedure **Exclude**(var s; const m); +  * procedure **Exclude**(var s; const m); 
-    * function **Sin**(const e: Extended): Extended; +  * function **Sin**(const e: Extended): Extended; 
-    * function **Cos**(const e: Extended): Extended; +  * function **Cos**(const e: Extended): Extended; 
-    * function **Sqrt**(const e: Extended): Extended; +  * function **Sqrt**(const e: Extended): Extended; 
-    * function **Round**(const e: Extended): LongInt; +  * function **Round**(const e: Extended): LongInt; 
-    * function **Trunc**(const e: Extended): LongInt; +  * function **Trunc**(const e: Extended): LongInt; 
-    * function **Int**(const e: Extended): Extended; +  * function **Int**(const e: Extended): Extended; 
-    * function **Pi**: Extended; +  * function **Pi**: Extended; 
-    * function **Abs**(const e: Extended): Extended; +  * function **Abs**(const e: Extended): Extended; 
-    * function **StrToFloat**(const s: String): Extended; +  * function **StrToFloat**(const s: String): Extended; 
-    * function **FloatToStr**(const e: Extended): String; +  * function **FloatToStr**(const e: Extended): String; 
-    * function **Padl**(const s: AnsiString; const I: LongInt): ​AnsiString+  * function **Padl**(const s: AnyString; const I: LongInt): ​AnyString
-    * function **Padr**(const s: AnsiString; const I: LongInt): ​AnsiString+  * function **Padr**(const s: AnyString; const I: LongInt): ​AnyString
-    * function **Padz**(const s: AnsiString; const I: LongInt): ​AnsiString+  * function **Padz**(const s: AnyString; const I: LongInt): ​AnyString
-    * function **Replicate**(const c: Char; const I: LongInt): String; +  * function **Replicate**(const c: Char; const I: LongInt): String; 
-    * function **StringOfChar**(const c: Char; const I: LongInt): String; +  * function **StringOfChar**(const c: Char; const I: LongInt): String; 
-    * function **Unassigned**:​ Variant; +  * function **Unassigned**:​ Variant; 
-    * function **VarIsEmpty**(const V: Variant): Boolean; +  * function **VarIsEmpty**(const V: Variant): Boolean; 
-    * function **Null**: Variant; +  * function **Null**: Variant; 
-    * function **VarIsNull**(const V: Variant): Boolean; +  * function **VarIsNull**(const V: Variant): Boolean; 
-    * function **VarType**(const V: Variant): Word; +  * function **VarType**(const V: Variant): Word; 
-    * procedure **RaiseLastException**;​ +  * procedure **RaiseLastException**;​ 
-    * procedure **RaiseException**(const Ex: TIFException;​ const Param: String); +  * procedure **RaiseException**(const Ex: TIFException;​ const Param: String); 
-    * function **ExceptionType**:​ TIFException;​ +  * function **ExceptionType**:​ TIFException;​ 
-    * function **ExceptionParam**:​ String; +  * function **ExceptionParam**:​ String; 
-    * function **ExceptionProc**:​ LongWord; +  * function **ExceptionProc**:​ LongWord; 
-    * function **ExceptionPos**:​ LongWord; +  * function **ExceptionPos**:​ LongWord; 
-    * function **ExceptionToString**(const er: TIFException;​ const Param: String): String; +  * function **ExceptionToString**(const er: TIFException;​ const Param: String): String; 
-    * function **StrToInt64**(const s: String): Int64; +  * function **StrToInt64**(const s: String): Int64; 
-    * function **Int64ToStr**(const i: Int64): String; +  * function **Int64ToStr**(const i: Int64): String; 
-    * function **StrToInt64Def**(const s: String; const def: Int64): Int64; +  * function **StrToInt64Def**(const s: String; const def: Int64): Int64; 
-    * function **SizeOf**(const Data): LongInt; +  * function **SizeOf**(const Data): LongInt; 
-    * function **IDispatchInvoke**(const Self: IDispatch; const PropertySet:​ Boolean; const Name: String; const Par: !OPENARRAYOFVARIANT):​ Variant; +  * function **IDispatchInvoke**(const Self: IDispatch; const PropertySet:​ Boolean; const Name: String; const Par: !OPENARRAYOFVARIANT):​ Variant; 
-    * function **Random**(const X: LongInt): LongInt; +  * function **Random**(const X: LongInt): LongInt; 
-    * function **RandomRange**(const AFrom: LongInt; const ATo: LongInt): LongInt; +  * function **RandomRange**(const AFrom: LongInt; const ATo: LongInt): LongInt; 
-    * function **RoundEx**(const chislo: Double; const Precision: LongInt): String; +  * function **RoundEx**(const chislo: Double; const Precision: LongInt): String; 
-    * function **Power**(const Base: Extended; const Exponent: Extended): Extended; +  * function **Power**(const Base: Extended; const Exponent: Extended): Extended; 
-    * function **IntPower**(const Base: Extended; const Exponent: LongInt): Extended; +  * function **IntPower**(const Base: Extended; const Exponent: LongInt): Extended; 
-    * function **IntToHex**(const Value: LongInt; const Digits: LongInt): String; +  * function **IntToHex**(const Value: LongInt; const Digits: LongInt): String; 
-    * function **Ceil**(const X: Extended): LongInt; +  * function **Ceil**(const X: Extended): LongInt; 
-    * function **Floor**(const X: Extended): LongInt; +  * function **Floor**(const X: Extended): LongInt; 
-    * function **Log2**(const X: Extended): Extended; +  * function **Log2**(const X: Extended): Extended; 
-    * function **Ln**(const X: Extended): Extended; +  * function **Ln**(const X: Extended): Extended; 
-    * function **Sqrt**(const X: Extended): Extended; +  * function **Max**(const A: LongInt; const B: LongInt): LongInt; 
-    ​* function **Max**(const A: LongInt; const B: LongInt): LongInt; +  * function **MaxExt**(const A: Extended; const B: Extended): Extended; 
-    * function **MaxExt**(const A: Extended; const B: Extended): Extended; +  * function **Min**(const A: LongInt; const B: LongInt): LongInt; 
-    * function **Min**(const A: LongInt; const B: LongInt): LongInt; +  * function **MinExt**(const A: Extended; const B: Extended): Extended; 
-    * function **MinExt**(const A: Extended; const B: Extended): Extended; +  * function **GetAfter**(const SubStr: AnsiString; const Str: AnsiString):​ AnsiString;​ 
-    * function **Length**(const Str: AnsiString):​ LongInt; +  * function **GetBefore**(const SubStr: AnsiString; const Str: AnsiString):​ AnsiString;​ 
-    ​* function **GetAfter**(const SubStr: AnsiString; const Str: AnsiString):​ AnsiString;​ +  * function **GetBetween**(const Str: AnsiString; const After: AnsiString; const Before: AnsiString):​ AnsiString;​ 
-    * function **GetBefore**(const SubStr: AnsiString; const Str: AnsiString):​ AnsiString;​ +  * function **SubStrPos**(const Str: AnsiString; const SubStr: AnsiString; const FromPos: LongInt): LongInt; 
-    * function **GetBetween**(const Str: AnsiString; const After: AnsiString; const Before: AnsiString):​ AnsiString;​ +  * function **RegExprGetMatchSubStr**(const Str: AnsiString; const MatchExpr: AnsiString; const AMatchID: LongInt): AnsiString;​ 
-    * function **SubStrPos**(const Str: AnsiString; const SubStr: AnsiString; const FromPos: LongInt): LongInt; +  * function **RegExprReplaceMatchSubStr**(const Str: AnsiString; const MatchExpr: AnsiString; const Replace: AnsiString):​ AnsiString;​ 
-    * function **RegExprGetMatchSubStr**(const Str: AnsiString; const MatchExpr: AnsiString; const AMatchID: LongInt): AnsiString;​ +  * function **GetNumberAfter**(const ASubStr: AnsiString; const AText: AnsiString):​ AnsiString;​ 
-    * function **RegExprReplaceMatchSubStr**(const Str: AnsiString; const MatchExpr: AnsiString; const Replace: AnsiString):​ AnsiString;​ +  * function **GetDiv3Path**(const ANumber: AnsiString):​ AnsiString;​ 
-    * function **GetNumberAfter**(const ASubStr: AnsiString; const AText: AnsiString):​ AnsiString;​ +  * function **StringReplace**(const SAnsiString; const OldPattern: AnsiString; const NewPattern: AnsiString; const ReplaceAll: Boolean; const IgnoreCase: Boolean): AnsiString
-    * function **GetDiv3Path**(const ANumber: AnsiString):​ AnsiString;​ +  * function **SetHeaderValue**(const AHeaders: AnsiString; const AName: AnsiString; const AValue: AnsiString):​ AnsiString;​ 
-    * function **GetUnixTime**: Int64+  * function **GetHeaderValue**(const AHeaders: AnsiString; const AName: AnsiString):​ AnsiString;​ 
-    * function **SetHeaderValue**(const AHeaders: AnsiString; const AName: AnsiString; const AValue: AnsiString):​ AnsiString;​ +  * function **GetUnixTime**:​ Int64; 
-    * function **GetHeaderValue**(const AHeaders: AnsiString; const AName: AnsiString):​ AnsiString;​ +  ​* function **SaveToLocalFile**(const AFullLocalFilename:​ AnsiString; const AData: AnsiString):​ LongInt; 
-    * function **SaveToLocalFile**(const AFullLocalFilename:​ AnsiString; const AData: AnsiString):​ LongInt; +  * function **FileExists**(const FileName: AnsiString):​ Boolean; 
-    * 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;
  
 ===== Выполнение 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>
Строка 155: Строка 173:
 ===== Работа с хитрыми системами координат ===== ===== Работа с хитрыми системами координат =====
  
-Если в папке с программой присутствует ​proj480.dll, то в скриптах будут доступны такие переменные+Если в папке с программой присутствует ​proj.dll, то в скриптах будут доступны такие переменные
   * переменная **DefProjConverter** с объектом типа:   * переменная **DefProjConverter** с объектом типа:
 <code delphi> <code delphi>
Строка 199: Строка 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>​