SASGIS

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

SAS.Wiki

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

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

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


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

Различия

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

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

описание_паскаль_скриптов [05/04/2015 15:52]
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**.
  
 Функции и процедуры,​ доступные в скриптах:​ Функции и процедуры,​ доступные в скриптах:​
Строка 117: Строка 126:
   * 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>
Строка 154: Строка 173:
 ===== Работа с хитрыми системами координат ===== ===== Работа с хитрыми системами координат =====
  
-Если в папке с программой присутствует ​proj480.dll, то в скриптах будут доступны такие переменные+Если в папке с программой присутствует ​proj.dll, то в скриптах будут доступны такие переменные
   * переменная **DefProjConverter** с объектом типа:   * переменная **DefProjConverter** с объектом типа:
 <code delphi> <code delphi>
Строка 198: Строка 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>​