Проблематика отображения на электронных картах больших массивов геопространственного векторного и растрового типов
Д.А. Денисов
1. Постановка задачи и актуальность
Область применения спутниковых данных широка - ГИС и картографические приложения, исследование природных ресурсов, мониторинг и оценка последствий стихийных бедствий и антропогенного воздействия на окружающую среду, городской и земельный кадастр, планирование и управление развитием городской инфраструктуры, сельское и лесное хозяйство, туризм и др. Спутниковые данные используются при создании и актуализации картографических данных для анализа и эффективного управления территорией.
Система электронной картографии позволяет оперативно и в любой точке Земного шара просмотреть соответствующую информацию по местонахождению, решить задачу дешефрирования (определения типа объектов и их количества) и другие. Это намного повышает и упрощает процесс работы с геопространственной информацией, а так же имеет большие перспективы для анализа, планирования и принятия решений на локальном и региональном уровнях.
Целью данной работы является разработка системы «Отображение больших массивов пространственной информации растрового и векторного типов и оптимизация их хранения» для отображения в двухмерной и трехмерной картографии (в частности, на картографической подложке Google Maps). В рамках достижения поставленной цели необходимо решить следующие задачи:
• провести анализ способов отображения пространственных данных растрового, векторного типов в электронной картографии, их хранение и доступ к ним;
• провести анализ необходимой функциональности в создаваемой системе и сформулировать ряд задач, которые необходимо решить для достижения данных целей;
• разработать эскизную модель системы;
• реализовать поставленные требования и создать готовую к эксплуатации систему;
• провести комплексную отладку и тестирование системы;
Должны быть реализованы следующие функциональные возможности:
• детализированное наложение снимков;
• оптимизированный поиск нужных снимков на сервере;
• кэширование снимков и оптимизация их наложения на клиентской стороне;
• создание архивов геопространственной информации;
• возможность задания оператором перечня отображаемой информации (тип снимков, тип аппарата, метаданные по снимкам, текущие координаты);
• балансировка нагрузки ( в том случае если используется браузер для доступа к серверу геоданных).
Для отображения векторного типа данных необходимо:
• создание областей рисования данных (разбиение всего пространства на сегменты с помощью адаптивного квадродерева);
• сопоставление каждому векторному объекту такой характеристики как «порог масштаба» (определяется по принадлежности объекта определенному масштабу и либо назначается при векторизации, либо путем фильтрации объектов через масштабные ячейки);
• возможность детализации каждого объекта с учетом текущего расположения до наблюдателя.
2. Анализ существующих технологий
На данный момент в электронной картографии существует три технологии отображения геопространственной информации (растровой):
• региональный принцип (когда данные выводятся большими или относительно большими сегментами территорий);
• динамический сегментный с помощью квадродерева (изображение создается заранее в виде древовидной структуры);
• динамическое формирование текущего сегмента (когда изображение создается «на лету» путем преобразования исходных данных).
Для отображения векторных данных применяются следующие алгоритмы:
• рисование векторных объектов одним махом без оптимизации невидимых объектов (используется при небольшом количестве и крайне неэффективно при возрастании числа объектов - от пятьсот и выше);
• рисование при помощи сегментов (вся область делится на ячейки одного уровня иерархии, которые и содержат объекты - более эффективный способ, но поиск сот (ячеек) может быть долгим);
• иерархические деревья - квадроструктуры.
3. Проектирование и разработка программы
3.1. Эскизный проект разрабатываемого ПО
Сначала я опишу технологическую часть создания отображения растровых данных.
Двумерная электронная картография (web-картография).
Тайл-генератор (осуществляет на основе полученного и ортотранс-формированного растрового изображения генерацию пирамиды снимка в виде мозаики и формирование архива пространственных данных с файл - паспортом на архив);
Модуль регистрации архивов пространственных данных в БД (когда архив пространственных данных создан информацию о нем необходимо внести в БД для того, что бы при обращении на сервер за растровыми снимками производился поиск в пространственных таблицах СУБД);
Контроллер нагрузки, который осуществляет балансировку загруженности серверов кластера в момент обращения клиентов на головной сервер по алгоритму Round Robin;
Серверный модуль обработки запросов пользователей (он предназначен для обработки поступающих от пользователей асинхронных ajax - запросов снимков и определение за сравнительно небольшое время, с учетом серверной логики, набора растровых изображений и выдачу результата в виде списка xml с ссылками на растры, которые необходимо будет загрузить с сервера);
Клиентский модуль с картографической подложкой и системой генерации запросов на сервер для получения растровых снимков (данный компонент представляет окно веб - браузера в котором имеется картографическая подложка в виде карты Google Maps, набор визуальных компонентов в виде кнопок для задания выводимого содержимого и параметров функционирования, а так же клиентская логика для наложения больших массивов данных растрового типа, получаемых с сервера).
Компонентная модель разрабатываемого веб - сервиса представлена на следующих рисунках:
Рис. 3.1.1. Программное обеспечение Erdas Imagine для обработки растровых данных.
Рис. 3.1.2. Модуль для создания архива пространственных данных из снимка (изображения).
Паспорт на архив пространственных данных
_ж_
Модуль регистрации архивов пространственных данных в СУБД MySQL с расширением Spatial Extension
СУБД , Ль ¿t l _
Рис. 3.1.3. Модуль регистрации архивов пространственных данных
в СУБД.
гд
Рис. 3.1.4. Клиентская и серверная части (компоненты) и их взаимосвязь.
Для организации хранения пространственных данных в БД используется расширение MySQL Spatial Extension, которое позволяет работать с геопространственными данными (точки, линии, полигоны и т.п.). В частности, можно сохранять географические данные в таблицах БД, столбцы которой имеют тип хранимой информации GEOGRAPHY.
Трехмерная электронная картография.
Так же используются инструменты создания архива тайлов в виде древовидной структуры подобные выше описанным.
Снимок представляется в виде квадродерева с помощью которого и производится определение видимости узлов.
Алгоритм проецирования текущего узла на трехмерную полигональную поверхность.
Здесь по трехмерной картографии описана возможность отображения снимков, которые загружаются в память в виде квадродеревьем.
Так же сейчас я провожу исследование возможности рисования большого количества снимков, которые хранятся в виде древовидной структуры не в памяти программы (так как это накладно), а в БД с пространственным расширением, как это осуществляется в двухмерной картографии. То есть к архиву из БД будет применяться текущее квад-родерево покрытия видимого участка Земли с областями разной детализации и соотвественно будут выбираться и создаваться нужные узлы снимка (ов).
Теперь я приступлю к технологии отображения векторных данных.
Как я уже отметил лучше использовать сегментный принцип отображения иерархического типа. Я создал принцип рисования большого количества векторных объектов с помощью адаптивного квадродерева, поместив объекты в нужные ячейки.
То есть объекты хранятся в узлах дерева. Каждый объект имеет признак «порог масштаба», который определяет текущий масштаб отображения объекта.
3.2. Алгоритмы функционирования
3.2.1. Принцип отображения растровых данных в двумерной картографии
Клиентское приложение в виде карты постоянно генерирует AJAX -запросы на сервер с текущей областью видимости. Сервер получив запрос и разбирает его, определяя тип растров отображения, уровень разрешения и снимки. Уровень разрешения определяется как отношение максимальной стороны области видимости к максимальной стороне описывающего полигона снимка и определения слоя по таблице (таблица 1).
k=si/s Уровень пирамиды видимости растрового изображения
k>=0.49 1
0.99=>k>=0.5 2
3.99=>k>=1.0 3
15.99=>k>=4.0 4
63.99=>k>=16.0 5
255.99=>k>=64.0 6
1023.99=>k>=256.0 7
То есть при формировании запроса указывается, из какой пространственной области выбрать тайлы, какого уровня, типа и сенсора.
/* Готовим запрос серверу */
$poly=$pnt2." ".$pnt1.",".$pnt2." ".$pnt3.",".$pnt4."
".$pnt3.",".$pnt4." ".$pnt1.",".$pnt2." ".$pnt1;
$add_query="";
if($type!=3)
$add_query=" and type=".$type." and id_sensor=".$id_sensor;
else
$add_query=" and id_sensor=".$id_sensor;
$query="SELECT path,type,layer,X(PointN(ExteriorRing(geom),1)) as jl,Y(PointN(ExteriorRing(geom),1)) as
id,X(PointN(ExteriorRing(geom),3)) as
jr,Y(PointN(ExteriorRing(geom),3)) as iu,data FROM raster WHERE Intersects(PolygonFromText('POLYGON((".$poly."))'), geom) and lay-er=".$zoomDefine.$add_query;
, где pnt1,2,3,4 - это координаты области видимости карты, то есть описывающая область в виде четырехугольника, zoomDefine - это текущее увеличение для конкретного снимка, а iu, id, jl, jr и layer - это поля из таблицы в БД которые удовлетворяют критерию выборки.
Но перед тем как выбрать конкретные тайлы определенного снимка, принадлежащие области видимости карты, необходимо определить для каждого снимка текущее разрешение (zoomDefine). Для этого определяется коэффициент соотношения площади снимка к видимой площади
карты и из этого соотношения по таблице, определенной ляем текущее разрешение изображения.
$query_s="select Area(geom)
Si,Area(PolygonFromText('POLYGON((".$poly."))')) as from raster WHERE Intersects(PolygonFromText( 'POLYGON((".$poly."))'), geom) and layer=1";
$k=Si/S;
$ll=1;
if($k<=0.49) $ll=1;
else if($k>=0.5 && $k<=0.99) $ll=2;
else if($k>=1.0 && $k<=3.99) $ll=3;
else if($k>=4.0 && $k<=15.99) $ll=4;
else if($k>=16.0 && $k<=63.99) $ll=5;
При получении ответа от сервера с перечнем тайлов отображения, клиентский модуль создает покрытие отображения, в частности для Google-карт - это объекты GGroundOverlay:
var boundaries = new GLatLngBounds(new GLatLng(curID,curJL), new GLatLng(curIU,curJR));
var oldmap = new
GGroundOverlay("http://127.0.0.1/"+Node+".GIF", boundaries); map.addOverlay(oldmap);
Объекты - тайлы кэшируются и при повторном отображении выгружаются из КЭШ'а (Рис. 3.2.1).
выше вычис-as
S,data_set
Рис. 3.2.1. Видимые узлы растрового слоя, загруженные с сервера (КЭШ'а).
3.2.2. Принцип отображения растровых данных в трехмерной картографии
Так как в отличии от двумерной картографии, в трехмерной помимо удаления от картографической подложки на определенное расстояние поверхность может наклоняться к плоскости наблюдателя, следовательно какие-то узлы снимка должны быть прорисованы с высокой детализацией, а какие-то с низкой.
Следовательно, для решения этой проблемы необходимо хранить снимок так же в виде древовидной пирамиды видимости, но текущий уровень разрешения конкретной части узла снимка определять как расстояние от точки камеры наблюдения до каждого узла и ,соответственно, принимать решение о дальнейшем рекурсивном обходе дерева вниз и рисовании более нижних узлов с более высоким разрешением (Рис. 3.2.1).
Рис. 3.2.1. Квадродерево растровых данных с разными уровнями разрешением узлов
Таким образом растр загружается в ОЗУ в виде дерева и в ходе навигации по полигональной поверхности (Земли или региона) происходит рекурсивный обход дерева (леса) и определение возможности рисования конкретного узла снимка с учетом расстояния от наблюдателя до него (узла), проецируется на поверхность и кладется в КЭШ.
3.2.2. Принцип отображения векторных данных
Для отображения векторных данных либо в двумерной, либо в трехмерной картографии используется тот же принцип, что и для отображения растровых данных.
Дерево векторных данных - это совокупность узлов, определяющих уровень видимости. Уровень видимости только в отличии от растровых данных - это не разрешение на местности, а значение текущего масштаба («порог масштаба») при котором векторный объект видим на карте.
Таким образом, при формировании дерева векторных объектов роль разрешения (уровня видимости) играет значение порогового масштаба, которое определяется путем фильтрации каждого векторного объекта через ячеистую структуру масштабной сетки и определения того значения масштаба, которому в действительности принадлежит объект как величины одного из максимальных габаритов объекта.
Так же необходимо задать алгоритм детализации объекта на разном удалении от него. Это позволит на большом удалении от объекта не прорисовывать его с высокой детализацией, а применить аппроксимацию по промежуточным точкам.
В результате при рисовании векторных объектов на картографической подложке видны лишь видимые узлы векторного пространства и на разном уровне приближения подгружаются те, которые соответствуют текущему масштабу.
Так же возникают ситуации когда векторная обстановка очень перенасыщена (имеет очень высокую плотность объектов) в отдельных местах по сравнению со всем векторным покрытием. Для того чтобы объекты рисовались более эффективнее в данной области я применил принцип адаптации узлов дерева векторных объектов. То есть, если узел имеет высокую плотность его дополнительно достраивают вглубь, разбивая пространство на дополнительное подпространство узлов (Рис. 3.2.1,3.2.2,3.2.3).
Рис. 3.2.1. Адаптивное квадродерево представления векторной информации.
Рис. 3.2.2. Адаптивное квадродерево векторных данных с более высоким разрешением.
Рис. 3.2.3. Адаптивное квадродерево векторных данных, отсеченное пирамидой видимостью.
4. Заключение
В процессе выполнения работы были получены следующие результаты:
• произведен анализ существующих способов представления векторных растровых данных;
• сформулирована цель и требования для разрабатываемого программного обеспечения;
• созданы эскизные модели систем, выбрана платформа, среда разработки и язык программирования, а так же способы оптимизации представления и отображения пространственной информации;
• реализован алгоритм отображения данных;
• внедрено разработанное ПО в качестве средства отображения геопространственной информации в рамках единого информационного пространства.
Литература
1. Дари К., Бринзаре Б. AJAX и PHP: Разработка динамических веб - приложений. - СПб.: Символ - Плюс, 2006. - 336 с.
2. Р.Д. Мэтьюз Web - сервер под Unix. Пер. с англ. -СПб: Символ-Плюс, 1998. -560 с.: ил.
3. Кадочников А. А. Технологии и программное обеспечение информационно - аналитических систем на основе геоинформационного Интернет-сервера: автореф. дис. канд. техн.наук: 05.13.11. Красноярск: ИВМ СО РАН, 2006. 20 с.
4. В.Ю. Ефремов, Ю.С. Крашенинникова, Е.А. Лупян, А.А. Мазуров, А.А. Прошин, Е.В. Флитман. Оптимизированная система хранения и представления географически привязанных спутниковых данных: Сборник научных статей. М.: Полиграф сервис, 2004. С. 437-443.
5. А. Матросов, А. Сергеев, М. Чаунин HTML 4.0 - БХВ-Петербург, 2007, 672 с.
6. Брайан Джонсон, Крэйг Скибо, Марк Янг Основы Microsoft Visual Studio .NET 2003 Inside Microsoft Visual Studio .NET - Русская Редакция, 2003 , 464 с.
7. Макс Шлее Qt. Профессиональное программирование на C++. Наиболее полное руководство - БХВ-Петербург, 2006 , 544 с.