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