Здесь показаны различия между двумя версиями данной страницы.
описание_паскаль_скриптов [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> | ||