Представляем вам заключительную статью по курсам образовательной программы «Академик». В предыдущих публикациях было рассмотрено построение отчётов с диалоговыми окнами и подключение отчёта к данным из 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. Эти значения можно задать в инспекторе объектов.
Объект "Карта" содержит большое количество настроек, которыми можно управлять, вызвав редактор объекта. Для этого сделайте двойной щелчок мышью на объекте или выберите пункт "Редактировать..." в его контекстном меню:
Объект "Карта" может содержать один или несколько слоев. Список слоев отображается в левом верхнем углу редактора:
Для добавления нового слоя нажмите кнопку "Добавить...". Будет показано следующее окно:
На этом шаге нужно выбрать тип слоя:
Если вы выбрали слой на основе файла карты, укажите дополнительно, как хранить картографические данные:
Важно отметить, что карты большого объема (более 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
В данном случае нужно настроить данные следующим образом:
Поле "Увеличить полигон" позволяет увеличить полигон с указанным именем на весь размер объекта "Карта". Например, чтобы увеличить страну Россия на карте мира, укажите в этом поле значение "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 рассчитает минимальное и максимальное значения для каждого диапазона автоматически, а размер возьмет из предустановок "Начальный размер", "Конечный размер". Настройка "Фактор ранжирования" меняет распределение значений по шкале.
Интерактивные карты стали очень популярными с появлением 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. Существует специальный сервис – интерактивная карта земного шара. Этот сервис позволяет выбрать нужную область и экспортировать ее в файл. Однако, есть ограничение по размеру экспортируемой области. Как правило в эту область помещается один населенный пункт, либо его часть. Давайте посмотрим, как это выглядит:
Нажав кнопку «Экспортировать», браузер закачивает файл 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, чтобы не мешали:
Пару слов о настройках слоя. Они представлены на пяти вкладках:
Добавим еще один слой таким же способом, как и ранее. На этот раз выберем лишь тег highway. На вкладке Appearance изменим Border Color на Maroon. Теперь дороги имеют малиновый цвет.
Добавляем третий слой. В этот раз выбираем тэг waterway. Изменим в Border Color цвет для водных объектов на синий. А Border Width установим в значение 2.
В настройках Map задаем заливку. Какой-нибудь пастельный цвет.
Не хватает только названий. Выбираем первый слой. На последней вкладке Label выбираем для Вид метки (Label Kind) значение Name. И для Колонка метки (Label column) – значение name.
Карту мы добавили, давайте посмотрим теперь как будет выглядеть gps трек для этой карты. Добавляем еще один слой и выбираем файл с расширением .gpx.
На вкладке Appearance выбираем яркий цвет для Border Color:
Карта готова. Запустим отчет:
Сразу же бросается в глаза наш gsp трек ярко-розового цвета. Мы можем перемещаться по карте с помощью мыши. Можно увеличивать/уменьшать масштаб с помощью колеса прокрутки мыши. Вверху справа расположен блок фильтрации. В нем вы можете отключать слои, если они мешают. Например, отключим последний слой – трек:
Есть некоторая сложность с добавлением карты по слоям. Приходится вручную добавлять нужные теги в слой. Но, зато, результат гораздо лучше, чем при добавлении всех тегов в один слой.
Теперь вы знаете обо всех основных функциях FastReport VCL 2021. Проявляйте креатив и создавайте свои прекрасные отчёты. От всей компании Fast Reports желаем вам удачи!