Биты и байты.

Биты и байты.

воскресенье, 6 июля 2014 г.

SQL и картография

Информацию нужно уметь подавать красиво..
В SSRS есть возможность красиво отобразить данные в отчете, если там  есть атрибут география будь то страна, регион, город и под рукой есть соответствующая карта.
Попробуем сделать это за 30 мин.
В итоге получится, отчет по регионам России, размер и цвет точки будут указывать количество населения в каждом регионе.
При наведении мышкой на регион должна появляться подсказка с наименованием региона и количеством людей проживающих в этом регионе.
При клике на любой регион должна открыться детальная карта этого региона по районам,  в Reporting Services есть возможность сделать подложку карт Bing maps.
Здесь регионы уже будут раскрашены по цветам в зависимости от количества населения в регионе.
Для этого нам понадобится сделать 5 шагов.

 
1. Загрузить карты .shp в SQL SERVER.  Shape-файл — векторный формат для хранения объектов, описываемых геометрией и соответствующими атрибутами. Карта состоит из набора файлов :

.shp  - Главный файл .shp содержит информацию о геометрических объектах. Файл состоит из заголовка фиксированной длины и одной или более записью переменной длины. Каждая запись переменной длины включает в себя заголовок записи и содержимое.
.dbf - Файл, в котором записывается атрибутивная информация, геометрических объектов описанных в .SHP — файле. Представляет из себя базу данных в формате dBase II.
.shx - Файл связи между файлами .dbf и .shp.

Карты по регионам России в формате shp можно взять отсюда ,  по всем странам можно взять здесь.

Отдельно взятую область можно всегда взять на сайте OpenStreetMap и сконвертировать  из формата Osm в shp с помощью этого сервиса или с помощью QGIS
Подробно о конвертации можно найти здесь

Для загрузки данных нам понадобится библиотека GDAL

1.1  Устанавливаем OSGEO4W  или QGIS (это свободная кроссплатформенная геоинформационная система, которая содержит в себе библиотеку GDAL)
1.2  Для загрузки shp файлов  SQL Server понадобится утилита ogr2ogr из этого пакета. Скачиваем общую  карту административно территориального деления с сайта ГИС ЛАБ  за что им огромное спасибо. Для загрузки карты используем  команду
ogr2ogr   -f "MSSQLSpatial"   "MSSQL:server=localhost;database=ProSpatial;trusted_connection=yes"   "regions2010.shp"


Чтобы ogr2ogr корректно работал с файлами в названии которых есть кириллица, необходимо, перед выполнением команд установить переменную среды:
SET GDAL_FILENAME_IS_UTF8=OFF

Если исходные данные в кодировке UTF-8, то необходимо явным образом указывать, что выходные данные также будут в UTF-8, с помощью опции -lco ENCODING=UTF-8, например:
ogr2ogr -lco ENCODING=UTF-8 output.shp input.vrt

Если возникает ошибка  ogr2ogr ERROR 1: INSERT command for new feature failed. Нужно добавить к команде -nlt MULTIPOLYGON

1.3 Карты по регионам России в формате shp можно взять отсюда . Для загрузки нужного региона используем аналогичную команду , помимо границ в карте есть и другие слои.
Для наших целей загрузим только границы.
ogr2ogr   -f "MSSQLSpatial"   "MSSQL:server=localhost;database=ProSpatial;trusted_connection=yes"   " boundary-polygon.shp"

P.S. Если все это слишком сложно также можно воспользоваться утилитой Shape2SQL. У нее есть графический интерфейс.



2. Создать и настроить отчет «Россия по регионам».  Для этого отчета мы будем использовать тип карты Основной, без дополнительных раскрашиваний по аналитическим атрибутам. Добавим лишь центральные точки для областей и подписи.
                2.1 Данные по статистике населения можно взять из википедии
                2.2 Добавляем компонент Map в отчет
               
                2.3 Настраиваем компонент для использования карты загруженной в SQL сервер, также в качестве карты можно использовать .shp файл.
                2.4 Указываем  запрос который  должен содержать поле типа geometry или geography
                2.5  Указываем пространственное поле, задаем масштаб и качество.
                2.6 Выбираем тип карты обычная карта и тему для карты Generic
                2.7 Настраиваем подписи к данным, на карте выбираем опцию «polygon properties»
                2.8 Включаем центральные точки «Show Center Points», настраиваем их размер , форму  и цвет


3. Создать и настроить  отчет «Регионы по районам». Для этой карты мы будем использовать тип карты  - цветная аналитическая карта (Color Analytical Map) и подложку карт Bing.
                3.1 Добавляем компонент Map в отчет. Указываем наш запрос к таблице где находятся данные по регионам, id код региона из главного отчета
               
3.2  Включаем подложку карт Bing (есть три варианта карт дорожная, спутниковая и смешанная), будем использовать  тип карты road .

3.3Выбираем тип карты цветная аналитическая карта


3.4 Настраиваем тему и отображение данных, выбираем поле  population для отображения цвета региона в зависимости от значения в поле population
3.5 Настраиваем подписи к данным для отображения в подсказке названия региона и численности населения

3.6 Добавляем параметр  @detail через него мы будем передавать из главного отчета код региона, делаем его внутренним параметром
4. Установить связь между отчетами можно настроив секцию Action в главном отчете  
="javascript:void(window.open('"& Globals!ReportServerUrl &"/Pages/ReportViewer.aspx?"&Globals!ReportFolder & "%2fDetailMapReport&rs:Parameters=False&detail=" &Fields!ID.Value & "','_blank'))"

               



В качестве небольшого бонуса рассмотрим задачу геокодирования адресов.
Для преобразования адреса  ,например «Москва, Планетная 3» в геокординаты (широта и долгота) можно воспользоваться сервисом геокодирования
Для этого достаточно отправить прямой HTTPS-запрос к геокодеру , который  возвращает результат в формате  json или xml, параметр sensor указывает исходит ли запрос от устройства с датчиком  GPS.

Формируем запрос

Обрабатываем полученный результат, нужные данные содержатся в теге <location>

Немного юмора напоследок…

Зима. Ночь. Чистое поле, мороз 25 градусов, сумасшедшая вьюга... По полю бежит мужик с пустыми санками и приговаривает: - Ничего, ничего, Серёжа, скоро дома будем..

- Почему ваша дочь пишет сочинение с ошибками, да ещё и с матом? - А что вы хотите? Девочка пишет, старается, волнуется , ошибается, матерится ....

Посмотрев цены на органы я понял, что у меня довольно богатый внутренний мир.


About