Использование интерактивных карт в FastReport VCL 2021

30.04.2021

FastReport VCL

Представляем вам заключительную статью по курсам образовательной программы «Академик». В предыдущих публикациях было рассмотрено построение отчётов с диалоговыми окнами и подключение отчёта к данным из Fast Report

Компонент "Карта" (MapObject) предназначен для отображения двумерных графических карт в формате ESRI shapefile (.shp), Open Street Map (.osm), GPS-трек (GPS Exchange File, .gpx).

http://ru.wikipedia.org/wiki/Shapefile
https://ru.wikipedia.org/wiki/OpenStreetMap
https://ru.wikipedia.org/wiki/GPX

Объект "Карта" состоит из следующих элементов:

Элементы карты

Один объект "Карта" может отображать один или несколько слоев. Каждый слой содержит отдельную карту.

В режиме дизайнера и в окне просмотра готового отчета вы можете управлять отображением карты с помощью мыши:

  • ­ колесо мыши меняет масштаб карты;
  • ­ нажав левую кнопку мыши, можно двигать карту;
  • ­ кликнув внутри полигона, можно настроить его свойства в инспекторе объектов.

Минимальное и максимальное значения масштабирования задаются в свойствах MinZoom, MaxZoom. Эти значения можно задать в инспекторе объектов.

Объект "Карта" содержит большое количество настроек, которыми можно управлять, вызвав редактор объекта. Для этого сделайте двойной щелчок мышью на объекте или выберите пункт "Редактировать..." в его контекстном меню:

Редактор карты

Добавление слоёв

Объект "Карта" может содержать один или несколько слоев. Список слоев отображается в левом верхнем углу редактора:

Слой карты

Для добавления нового слоя нажмите кнопку "Добавить...". Будет показано следующее окно:

Добавление слоя

На этом шаге нужно выбрать тип слоя:

  • ­карта из файла (.shp/.dbf, .osm, .gpx). Это наиболее часто используемый тип карт. К примеру, вы можете напечатать карту мира и выделить цветом страны, в которых продажи были больше определенного значения;
  • ­картографические данные из приложения. Ваше приложение должно предоставлять географические координаты (пару значений - широта и долгота), которые будут отображены в виде точки на карте. Точка может иметь подпись, а также быть разного размера и/или цвета, в зависимости от некоторых данных. На практике этот тип карты используется в качестве второго слоя (первый слой, базовый, берется из файла карты). Например, базовый слой отображает карту какой-либо страны, а второй слой - точки с названиями городов, в которых были продажи. Размеры и цвет точки можно настроить таким образом, чтобы был понятен уровень продаж в данном городе.

Если вы выбрали слой на основе файла карты, укажите дополнительно, как хранить картографические данные:

  • ­данные внедряются в файл отчета. При этом отчет может сильно увеличиться в размерах;
  • ­файл отчета ссылается на файл карты, внедрения не происходит. Этот режим полезен, если у вас есть несколько отчетов, использующих одни и те же карты.

Важно отметить, что карты большого объема (более 30Мб) или с большим количеством полигонов (более 20000) серьезно замедлят работу отчета.

Настройка внешнего вида

Для этого мы переключимся во вкладку "Внешний вид" и выберем необходимый слой: 

Внешний вид слоя карты

Здесь можно настроить цвет и стиль рамки полигонов карты, а также выбрать цветовую палитру. Если вы настроили выделение полигонов цветом в зависимости от аналитических данных (об этом позднее), то палитра будет проигнорирована.

На карте могут отображаться надписи, например, названия стран на карте мира. Вы можете настроить тип и внешний вид надписей во вкладке "Метки":

Метки слоя

Если выбран тип слоя - карта из файла .shp, то необходимо указать поле, из которого будет взята надпись. Как правило, это поле "NAME". Для карты мира, входящей в состав демо-программы FastReport, можно выбирать из следующих полей:

- NAME (например, Russia)
- ABBREV (например, Rus.)
- ISO_A2 (например, RU)
- ISO_A3 (например, RUS)

Но для других карт список полей будет отличаться.

Подключение к данным

Большинство отчетов используют объект "Карта" не сам по себе, а для отображения аналитической информации. Например, это может быть объем продаж в разных странах. Для этого слой надо подключить к данным. Сделать это можно в редакторе карты, выбрав слой и переключившись на закладку "Данные". Подключение к данным различается в зависимости от типа слоя (из файла карты, или геоданные из приложения):

  • если тип слоя указан как карта из файла, закладка "Данные" выглядит следующим образом:

Настройки данных

В этом случае приложение должно предоставить следующие данные:

  • название (например, название страны);
  • числовое значение (например, уровень продаж в данной стране).

Допустим, у вас имеется таблица Sales со следующими полями и данными:

Country        Sales Total
-------           ----------
USA              500000
Germany       1200000
Russia           300000

В данном случае нужно настроить данные следующим образом:

  • источник данных - Sales
  • пространственные данные, столбец - выберите то поле, которое в файле карты отвечает за название страны. Как правило, это поле "NAME".
  • пространственные данные, значение - [Sales.Country]
  • аналитические данные, значение - [Sales.SalesTotal]
  • аналитические данные, функция - "Сумма". Функция используется, если для данной страны есть несколько записей с разными значениями.

Поле "Увеличить полигон" позволяет увеличить полигон с указанным именем на весь размер объекта "Карта". Например, чтобы увеличить страну Россия на карте мира, укажите в этом поле значение "Russia" (с кавычками).

  • если тип слоя указан как данные, предоставляемые приложением, закладка "Данные" выглядит следующим образом:

Закладка "Данные"В этом случае приложение должно предоставить следующие данные:

- пространственные данные - широта и долгота;
- метка (например, название города);
- числовое значение (например, уровень продаж в данном городе).

Допустим, у вас имеется таблица Sales со следующими полями и данными:

Latitude         Longitude       CityName       SalesTotal
--------           ---------         --------           ---------
48.13641       11.57753        Munchen        50000
50.94165       6.95505          Koln               36000

В этом случае нужно настроить данные следующим образом:

- источник данных - Sales
- пространственные данные, широта - [Sales.Latitude]
- пространственные данные, долгота - [Sales.Longitude]
- пространственные данные, метка - [Sales.CityName]
- аналитические данные, значение - [Sales.SalesTotal]
- аналитические данные, функция - "Сумма". Функция используется, если для данного города есть несколько записей с разными значениями.

Выделение данных цветом

После того как слой подключен к данным, возникает вопрос - в каком виде выводить аналитическую информацию (например, объемы продаж в разных странах)? Самый простой способ - настроить отображение надписей так, чтобы помимо названия страны выводились и цифры продаж (см. раздел "Настройка отображаемых значений"). Однако, гораздо более наглядный способ - это раскраска стран в определенные цвета в зависимости от объема продаж. Для этого надо настроить цветовую шкалу во вкладке "Диапазоны цвета":

Диапазоны цвета

Цветовая шкала представляет собой набор значений: минимальное значение; максимальное значение; цвет. Таких наборов (диапазонов) может быть несколько. Для настройки цветовой шкалы надо указать, сколько диапазонов она содержит, после этого настроить минимальное и максимальное значение в каждом диапазоне, а также цвет:

Редактор коллекции цветовых рангов

По умолчанию все значения установлены в "Авто". В этом случае FastReport рассчитает минимальное и максимальное значения для каждого диапазона автоматически, а цвет возьмет из предустановок "Начальный цвет", "Средний цвет" и "Конечный цвет". Этот режим можно использовать в большинстве случаев. Настройка "Фактор ранжирования" меняет распределение значений по шкале.

Если цветовая шкала настроена, то в нижней части карты появляется индикатор - полоска из нескольких разноцветных прямоугольников:

Цветовая шкала

Внешний вид и расположение индикатора можно настроить, выбрав в списке слоев элемент "Карта" и переключившись на закладку "Цветовая шкала":

 Шкала цветов

Выделение данных размером

Если тип слоя указан как данные, предоставляемые приложением, то значения будут отображаться в виде точки с надписью. Размер точки можно привязать к данным примерно таким же способом, как это делается при выделении цветом. Сделать это можно на закладке "Диапазоны размера":

Диапазоны размера

Шкала размеров представляет собой набор значений: минимальное значение; максимальное значение; размер в пикселях. Таких наборов (диапазонов) может быть несколько. Для настройки шкалы надо указать, сколько диапазонов она содержит, после этого настроить минимальное и максимальное значение в каждом их них, не забыв про размер.

По умолчанию все значения установлены в "Авто". В этом случае FastReport рассчитает минимальное и максимальное значения для каждого диапазона автоматически, а размер возьмет из предустановок "Начальный размер", "Конечный размер". Настройка "Фактор ранжирования" меняет распределение значений по шкале.

Как использовать интерактивные карты в FastReport VCL 2021

Интерактивные карты стали очень популярными с появлением Google Map. Такие карты позволяют перемещаться по карте, увеличивать или уменьшать масштаб и многие другие функции. С выходом FastReport VCL 2021 такие карты можно внедрять в отчеты. Для этого необходимо получить карту в одном из двух доступных форматов и вставить ее в отчет с помощью объекта Map.

Вы можете использовать карты в формате .shp и .osm, а также gps треки в формате .gpx.

Формат .shp – ShapeFile. Это специальный формат хранения векторных геоинформационных данных. Был разработан американской компанией ESRI в 1990х. В настоящее время самый распространенный формат, применяемый в Геоинформационных системах.

На самом деле ShapeFile это не одиночный файл. Помимо файла .shp набор включает еще .shx и .dbf.

Первый, .shp, представляет собой геометрическое описание фигур. Файл формата .shx имеет позиционный индекс для привязки фигур друг к другу. Файл .dbf содержит информацию о фигурах из файла .shp.

Так как это коммерческий продукт, некоторые карты могут быть платными.

Формат .osm – OpenStreetMap. Это формат хранения географических данных основанный на xml. Из названия понятно, что это открытый проект, который поддерживается исключительно добровольцами. Этот веб-проект представляет собой глобальную карту земного шара. Волонтеры постоянно пополняют карту новыми геолокационными данными, аэрофотоснимками. Проект получил большую популярность и имеет огромное количество участников. Поэтому подробность карт находится на достаточно высоком уровне. Все карты в osm, как и в shp представлены в двумерном формате без отображения высот над уровнем моря.

Так как проект бесплатный, то и карты бесплатны.

Для начала нам потребуется карта. Объект Карта поддерживает три формата файлов: .shp, .osm, .gpx.

Первые два представляют собой векторные карты, последний – набор маршрутов и треков для карт. Вы можете загрузить карту в одном из доступных форматов, а затем, в новом слое GPS данные.

Прежде чем рассматривать объект Карта, давайте определимся, где же брать эти карты. Вы можете скачать готовые карты в интернете. Множество сайтов предоставляет как платные, так и бесплатные карты в обоих форматах.
Есть еще один способ получить файл с картой. Он подходит для формата osm. Существует специальный сервис – интерактивная карта земного шара. Этот сервис позволяет выбрать нужную область и экспортировать ее в файл. Однако, есть ограничение по размеру экспортируемой области. Как правило в эту область помещается один населенный пункт, либо его часть. Давайте посмотрим, как это выглядит:

Выбор участка карты на www.openstreetmap.org

Нажав кнопку «Экспортировать», браузер закачивает файл osm. Так, что, если вам требуется показать небольшую область на карте, этот сервис очень поможет. Если вы хотите просто поэкспериментировать, то можете взять готовые файлы PortoSantoTrack.osm и PortoSantoTrack.gpx из поставки FastReport VCL 2021. Создаем отчет и добавляем на страницу объект Map. К слову, вы можете размещать этот объект на любом бэнде, кроме «Данные». Добавив объект, мы сразу же увидим его редактор.

Редактор карты

Пока еще объект пуст. Мы видим только: общие настройки (general), цветовая гамма (color scale), размерная шкала (size scale).

Важно отметить, что вы можете выводить всю карту в одном слое, либо разделив на несколько.

В случае разделения карты на несколько слоев, каждый слой настраивается отдельно - цвет, шрифт, толщина линий и прочее. С помощью разных настроек для отдельных слоев мы можем, например, окрасить реки в синий цвет, а торговые пути в красный. Объекты карты описываются тегами в XML (OSM) файле. В каждом слое мы выбираем нужные для отображения теги (объекты). Затем, в настройках задаем параметры (цвет, шрифт, толщину и др.). В общем, послойное отображение карты позволяет нам настроить отображение как хочется.

В случае, когда вы выводите карту в одном слое, настройки применяются ко всем объектам карты и вы не сможете настроить отображение отдельных ее элементов.

Тут нужно сказать, что для карт в формате .shp доступно отображение только в одном слое.

Чтобы добавить карту, нажимаем кнопку Add…:

Добавление слоя карты

Появляется окно добавления слоя. Выбираем файл с картой или GPS треком. Вы можете включить файл в отчет с помощью соответствующей опции. Ниже мы видим еще два варианта добавления слоя:

пустой слой с данными из приложения – данные для построения карты могут быть не только в файле, но и в базе данных. Поэтому создаем пустой слой и настраиваем подключение к источнику данных;
пустой интерактивный слой – как я понял, это еще не реализованный функционал. Предполагается возможность создать слой вручную, с помощью примитивов.

Нажимаем кнопку OK. Если мы загружаем .osm файл, то будет предложено окно выбора тэгов:

Редактор тегов слоя карты

Теперь внимание! Если нажать кнопку Отмена, то автоматически будут выбраны все теги для данного слоя. Но мы идем другим путем.
С помощью кнопки со стрелками перемещаем тэги в правую часть. Если мы хотим отображать карту в нескольких слоях, то выбираем нужные для текущего слоя тэги. Например, в первый слой были перемещены все теги кроме highway и waterway:

Перемещение тэгов в правую часть

Внизу есть фильтр для тегов. Нажимаем кнопку Ок и получаем почти всю карту:

Слой карты добавлен

В настройках слоя 1 на вкладке Appearance (Вид) выставим Point Size (Размер точки) в 0, чтобы не мешали:

Настройки первого слоя карты

Пару слов о настройках слоя. Они представлены на пяти вкладках:

  • Data – для варианта использования геоданных из базы;
  • Appearance – настройки внешнего вида линий;
  • Color Ranges – настройки цветовой палитры для автоматического закрашивания объектов на карте;
  • Size Ranges – настройки размерной таблицы или размерной сетки;
  • Labels – настройки меток.

Добавим еще один слой таким же способом, как и ранее. На этот раз выберем лишь тег highway. На вкладке Appearance изменим Border Color на Maroon. Теперь дороги имеют малиновый цвет.

Настройка Border Color

Добавляем третий слой. В этот раз выбираем тэг waterway. Изменим в Border Color цвет для водных объектов на синий. А Border Width установим в значение 2.

В настройках Map задаем заливку. Какой-нибудь пастельный цвет.

Добавление слоя с тэгом waterway

Не хватает только названий. Выбираем первый слой. На последней вкладке Label выбираем для Вид метки (Label Kind) значение Name. И для Колонка метки (Label column) – значение name.

Вид метки Name

Карту мы добавили, давайте посмотрим теперь как будет выглядеть gps трек для этой карты. Добавляем еще один слой и выбираем файл с расширением .gpx.
На вкладке Appearance выбираем яркий цвет для Border Color:

Настройки готовой карта

Карта готова. Запустим отчет:

Готовая карта

Сразу же бросается в глаза наш gsp трек ярко-розового цвета. Мы можем перемещаться по карте с помощью мыши. Можно увеличивать/уменьшать масштаб с помощью колеса прокрутки мыши. Вверху справа расположен блок фильтрации. В нем вы можете отключать слои, если они мешают. Например, отключим последний слой – трек:

Карта с отключенным последним слоем

Есть некоторая сложность с добавлением карты по слоям. Приходится вручную добавлять нужные теги в слой. Но, зато, результат гораздо лучше, чем при добавлении всех тегов в один слой.

Теперь вы знаете обо всех основных функциях FastReport VCL 2021. Проявляйте креатив и создавайте свои прекрасные отчёты. От всей компании Fast Reports желаем вам удачи!

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
11 декабря 2023

Новый транспорт S3 (Amazon) в FastReport VCL

В этой статье мы рассмотрим новый транспорт в S3 (Amazon) для FastReport VCL, являющийся объектным хранилищем файлов и бакетов.
26 сентября 2023

Новый транспорт NextCloud в FastReport VCL

Подробная инструкция по использованию нового транспорта для подключения к NextCloud чтобы сохранять построенные отчёты в облако.