|
|
|||||||||||||||||||||||||||||
|
Вывод картографической информации средствами Oracle с использованием Web-приложенияИсточник: oracle
Введение Oracle Application Server MapViewer (или просто MapViewer) является программным инструментом для отображения карт. Он использует пространственные данные, управляемые компонентами базы данных для работы с картографической информацией - Oracle Spatial или Oracle Locator. MapViewer предоставляет инструменты, которые скрывают сложность и комплексность организации запросов к пространственным данным и функциям отображения карт, но в то же время предоставляет широкий набор средств для более тонкой и всесторонней настройки параметров для более опытных пользователей. Эти инструменты могут быть помещены в платформно-независимую среду разработки и использованы для интеграции с приложениями, отображающими картографические данные. В качестве примера, иллюстрирующего возможности использование MapViewer, рассмотрим реализацию простейшего Web-приложения. В качестве клиентской части данного приложения будет задействован обычный Web-браузер. HTML-страница для отображения на стороне клиента будет динамически генерироваться при помощи пакета PL/SQL UTL_HTTP и содержать необходимые функции для навигации по отображаемому в ее составе плану-схеме. Для обеспечения картографического изображения, которое находится на странице, будет задействован MapViewer. В качестве примера приложения решим задачу отображения картографического плана-схемы земельных участков города. Таким образом, вывод картографических элементов будет являться частью более крупной информационной Web-системы. Пример приложения, использующего MapViewer, содержит пространственные таблицы Oracle Spatial и метаданные, созданные для обеспечения работы с заданными таблицами, пример организации источника данных для MapViewer, XML-запросы к MapViewer и код PL/SQL процедуры, генерирующей HTML-страницу. Установка и настройка MapViewer Для того, чтобы начать работать с MapViewer, необходимо иметь следующие пакеты Java и продукты Oracle, соответствующих версий или выше:
Все перечисленные компоненты доступны на сайте Oracle и Sun. Их использование в коммерческих целях требует соблюдения требований лицензирования. MapViewer запускается, как OC4J Web-приложение и принимает запросы от клиентов. Его можно установить в составе полного Oracle Application Server или в виде отдельной автономной инсталляции компонента OC4J. С более подробными инструкциями по установке можно ознакомиться в соответствующей документации, прилагающейся к дистрибутиву продукта. Если настройки MapViewer, установленные по умолчанию, необходимо изменить, можно отредактировать конфигурационный файл MapViewer mapViewerConfig.xml, который располагается по следующему пути: $ORACLE_HOM E\lbs\mapviewer\conf. После того, как файл будет изменен, необходимо перезапустить MapViewer, чтобы изменения вступили в силу. Конфигурационный файл задает следующую информацию в XML-формате:
Подробнее остановимся лишь на последнем элементе настройки, так как он имеет непосредственное отношение к приложению, которое рассматривается в этом материале. Конечно, источник данных для карты можно настроить динамически, выполнив соответствующий XML-запрос к MapViewer, но более простым решением будет задать нужный источник данных в конфигурационном файле, чтобы он был доступен всегда. Зададим нужный нам источник данных в элементе <map_data_source> <map_data_source name="ds_demo" jdbc_host="hostserver" jdbc_sid="map9" jdbc_port="1521" jdbc_user="map" jdbc_password="!mappswrd" jdbc_mode="thin" number_of_mappers="5" />
Основные принципы взаимодействия с MapViеwer MapViewer представляет собой специализированный компонент среднего уровня в составе Oracle Application Server и состоит из двух основных компонентов:
Подсистема рендеринга подключается к базе данных Oracle посредством JDBC и выполняет доступ к пространственным данным (чтение и запись данных, хранящихся в Oracle Spatial или Oracle Locator). Также эта подсистема загружает из базы данных метаданные для настройки отображения карты (характеристики карты, стили и правила отображения данных, условные знаки и т.д.), чтобы в ходе работы применить их к извлекаемым из базы данных пространственным данным. Использование языка XML предоставляет разработчикам приложений высокоуровневый интерфейс, при помощи которого можно отправлять картографические запросы к MapViewer и получать ответы в виде сгенерированного растрового изображения. MapViewer может взаимодействовать с такими клиентами, как Web-браузер или специально разработанное клиентское приложение, используя протокол HTTP. Схема взаимодействия с MapViewer укладывается в два основных шага и не зависит от того, является ли это обычным клиентским запросом или некоторым административным действием (см. рисунок 1). Для запроса клиентом картографической информации: 1. Выполняя запрос, клиент включает в него имя карты (то есть имя мета-описания хранящегося в базе данных), источник данных, центр местоположения, размеры карты, а возможно и другие данные, которые необходимы для отображения карты в нужном виде. 2. Сервер возвращает изображение карты (или URL-адрес по которому доступно это изображение) и габаритный прямоугольник (MBR - минимальный охватывающий прямоугольник) карты, а также статус, отражающий успешность выполнения запроса. Для административных запросов, управляющих конфигурацией MapViewer: 1. Клиент запрашивает у MapViewer административное действие, посылая информацию о типе запроса и необходимые для полноты запроса значения его параметров. 2. Сервер возвращает статус запроса и запрошенную информацию.
Рисунок 1. Схема базового взаимодействия для MapViewer
Рисунок 2. Обобщенная архитектура приложения.
Структура демонстрационного приложения
Рисунок 3. Основные элементы приложения В рассматриваемом упрощенном приложении Web-браузер выступает в качестве клиента. Он обращается к поставляемому с сервером Oracle Web-серверу Apache с запросом на выполнение PL/SQL-процедур с заданными параметрами. Процедура динамически генерирует HTML-страницу, содержащую план-схему. HTML-страница является носителем интерфейса пользователя и средством сохранения информации о состоянии пользовательского сеанса. Она содержит ссылку на растровое изображение плана-схемы, а также набор элементов управления для навигации по отображаемому на ней плану-схеме. Элементы управления выполнены в виде сгенерированных и вставленных в тело страницы запросов к PL/SQL-процедуре: увеличить, уменьшить масштаб; сдвинуть вправо, влево, вверх, вниз. Такой подход к организации навигации позволяет сохранить информацию о состоянии текущего сеанса пользователя в контексте взаимодействия браузера и Web-сервера без привлечения дополнительных механизмов (сookies, аутентификация и т.д.). Web-сервер, функционирующий в составе сервера Oracle, обеспечивает работу Web-сервиса. Он осуществляет передачу и прием данных в рамках HTTP-протокола. В частности, он обеспечивает параметризированный вызов PL/SQL-процедуры, отправку браузеру динамически сгенерированной HTML-страницы и сгенерированного изображения плана-схемы. MapViewer по XML-запросу PL/SQL-процедуры на основе заранее созданной карты и связанных с ней метаданных генерирует изображение плана-схемы фрагмента населенного пункта в указанном масштабе, с указанными размерами изображения и по указанным координатам. Он возвращает PL/SQL-процедуре ссылку на изображение сгенерированного изображения. PL/SQL-процедура работает на стороне сервера и отвечает за генерацию HTML страницы. По запросу Web-браузера она генерирует HTML-страницу, в которую включает ссылку на изображение плана-схемы. Это изображение процедура предварительно запрашивает у MapViewer по заданным в качестве параметров процедуры координатам плана и масштабу, а также генерирует управляющие элементы навигации по плану-схеме. Эти управляющие элементы содержат обращения к той же самой PL/SQL-процедуре, но уже с модифицированными относительно текущего положения и масштаба плана-схемы параметрами. Сервер Oracle Spatial содержит таблицы с пространственными данными и метаданными, необходимыми для работы приложения. Пространственные данные проиндексированы, могут формироваться и использоваться и другими приложениями. Структуры данных Spatial, задействованные в проекте Для того, чтобы вывести пространственные объекты при помощи MapViewer на растровое отображение карты, в базе данных Oracle необходимо создать таблицы, содержащие геометрические описания необходимых пространственных объектов, хранящиеся в столбцах типа SDO_GEOMETRY. Эти таблицы также могут содержать помимо колонок с пространственной информацией, необходимые столбцы, содержащие дополнительную семантическую информацию, по объектам. Например, подобная информация может служить для вывода текстовых надписей на объектах при формировании карты. Для более эффективной работы Spatial с этими таблицами необходимо создать пространственные индексы для столбцов с пространственной информацией. Предположим нам необходимо обеспечить вывод информации о зданиях, улицах и земельных участках населенного пункта. Для обеспечения работы демонстрационного приложения в базе данных Oracle необходимо создать соответствующие таблицы пространственных данных:
Все три таблицы создадим в схеме, которую назовем MAP. Данные для примера в каждую из таблиц можно загрузить при помощи стандартного загрузчика Oracle или воспользоваться специализированной программой третьей фирмы. Например, Easy Loader, поставляемый с MapInfo, позволяет загрузить в Oracle Spatial данные из файлов формата MapInfo (TAB) и сразу же создать пространственные индексы на пространственные колонки (подробнее о программе смотрите здесь http://www.mapinfo.com). Также можно воспользоваться программой FME, позволяющей загружать данные из различных форматов (подробнее о программе смотрите http://www.safe.com/products/fme/). Доступ к графической информации осуществляется опосредовано - через соответствующие процедуры PL/SQL, которые неявно формируют политику доступа к данным. Следует отметить, что в порядке разграничения доступа может возникнуть задача ограничения объема вывода информации, введения заданной погрешности в отображение данных, и другие. Эти проблемы могут быть решены, однако их рассмотрение выходит за рамки данной статьи. Для простейшего случая подключения к базе картографических данных MapViewer и Web-сервера необходимо создать соответствующего пользователя (или отдельно пользователей для MapViewer и Web-сервера для более полного разграничения доступа), в схеме которого будут храниться данные. Концепция MapViewer применительно к разрабатываемому приложению Для описания того, как и что будет выводить MapViewer в ответ на запрос клиента, используются метаданные в служебной схеме MDSYS, хранящие в виде XML-описаний информацию о правилах отображения пространственных объектов, перечне слоев, участвующих в формировании карты, и параметрах отображения самой карты. Основными типами метаданных являются стили, темы и базовые карты. Следует отметить, что при пересоздании схемы пользователя, метаданные не сохраняются, поскольку не находятся непосредственно в его схеме. При перезагрузке данных в схеме необходимо создавать метаданные заново или позаботиться о заполнении соответствующих таблиц в схеме MDSYS, например, с использованием соответствующих сохраненных SQL-команд. Стили (styles) определяют свойства отображения для объектов, с которыми ассоциированы данные стили. Например, стиль текста определяет, как объекты будут подписываться на карте, а стиль линий определяет, как будут отображаться на карте линейные объекты, такие, как улицы. Каждый стиль имеет уникальное имя, и определяется одним или несколькими графическими элементами в синтаксисе XML Основные типы стилей
Все стили, которые заданы пользователем, можно обнаружить в пользовательском представлении USER_SDO_STYLES. Тема (theme) - это коллекция объектов (заданных как пространственными, так и непространственными атрибутами), с которыми ассоциированы стили отображения или набор правил, задающих стили отображения. Каждая тема (если эта тема - не изображение) связана с хранящимся пространственным слоем, представленным таблицей или представлением, имеющим в своем составе столбец типа MDSYS.SDO_GEOMETRY. Все предопределенные пользовательские темы можно увидеть в пользовательском представлении USER_SDO_THEMES. Базовая карта (base map), на основе которой формируется вывод графических данных, обычно состоит из одной или нескольких тем. С картой связана определенная система координат, в которой отображаются все темы, образующие карту. Все темы в карте должны содержать пространственные объекты, которые заданы в данной системе координат. Порядок следования тем при добавлении определяет порядок их отрисовки на карте. Т.е. последняя добавленная тема отображается самой последней поверх всех остальных и так далее. Каждая тема в базовой карте может быть ассоциирована с масштабными границами, определяющими ее видимость. Все имена базовых карт и все пользовательские настройки базы данных можно увидеть в пользовательском представлении USER_SDO_MAPS. Колонка DIFINITION в представлении USER_SDO_MAPS хранит XML-описание базовой карты. Карта является компонентом, который MapViewer создает в ответ на картографический запрос на основе базовой карты и ряда других параметров. Карта может быть файлом изображения, объектом, который предоставляет доступ к файлу изображения карты или URL-ссылкой на файл изображения карты. Под размером карты (Size) подразумевается высота карты в заданных единицах измерения карты. Масштаб карты вычисляется, как количество единиц измерения карты, представленных в одном дюйме на экране или устройстве вывода. Его можно использовать в качестве знаменателя в наиболее распространенном методе представления картографического масштаба 1/n. Набор связанных объектов, участвующих в определении карты, можно назвать картографическим профилем приложения. Разработчик может управлять стилями, темами и базовыми картами также при помощи поставляемой дополнительно утилиты Map Definition Tool. Использование инструмента формирования метаданных Map Definition Tool Map Definition Tool является автономным приложением, написанным на Java. Оно позволяет создавать, модифицировать и удалять стили, темы и базовые карты. Например, можно разработать и задать новый стиль линии, увидеть предварительное отображение этого стиля, модифицировать его при необходимости, а затем вставить XML-описание нового стиля в базу данных. Инструмент использует введенную разработчиком информацию, относящуюся к стилю, чтобы сгенерировать соответствующее описание в XML-формате. Когда возможно, желательно использовать Map Definition Tool вместо прямой модификации метаданных MapViewer. Утилита всегда проверяет и поддерживает ссылочную целостность между объектами. Map Definition Tool содержит ряд закладок, сгруппированных в следующие категории
В первую очередь нужно воспользоваться вкладкой Connection, чтобы подключиться к базе данных Oracle. Кнопкой Connect to вызывается диалоговое окно для задания параметров нового подключения. В общем случае, в этом окне необходимо указать имя сервера или его IP-адрес, на котором запущен Oracle, задать имя экземпляра базы данных, порт и данные пользователя (имя и пароль). Как только подключение будет выполнено, станут доступны и все остальные разделы утилиты. Обычно, прежде всего, формируется библиотечка элементарных стилей, которые будут участвовать в отображении карты. Для рассматриваемого приложения создаются три типа стилей. Через вкладку Color раздела Styles созданы стили COLOR_BUILDS для отображения темы зданий и COLOR_PARCELL для отображения темы земельных участков. На данной вкладке в поле Name указывается уникальное имя стиля. В группах Stroke Color и Fill Color задаются соответственно цвет окантовки объектов и цвет их заливки. Цвета можно задавать при включенной галочке Apply либо при помощи кнопки Sample Color, дающей доступ к наглядной палитре цветов. Можно также воспользоваться прямым указанием RGB-кода цвета в окошке ниже упомянутой кнопки. Регулятор Opacity позволяет регулировать степень прозрачности заливки или окантовки. В поле Description можно задать пояснительную информацию к данному стилю. Для занесения вновь сформированного стиля в библиотечку нужно нажать кнопку Insert внизу вкладки и название стиля появиться в списке доступных площадных стилей. В дальнейшем, если возникнет необходимость отредактировать данный стиль, нужно выбрать его в списке, изменить нужные свойства на вкладке и нажать кнопку Update. Чтобы очистить вкладку перед формированием нового стиля, нужно нажать кнопку New. Через вкладку Line раздела Styles сформирован стиль LINE_STREET отображения темы улиц. В данной задаче оси улиц служат лишь в качестве опорных объектов для вывода названий улиц и желательно отображение самих линий сделать невидимым. Для этого можно оставит галочку Apply только в разделе Overall Style и указать в качестве цвета белый. Значение Opacity выставить на минимально возможную величину. Для отображения надписей через вкладку Text раздела Styles созданы три текстовых стиля: TEXT_BUILDS для отображения номеров домов, TEXT_STREET для отображения названий улиц и TEXT_PARCELL для отображения номеров земельных участков. Все три стиля создаются одинаково. При необходимости можно указать, будет ли текст наклонным (флажок Italic) или жирным (флажок Bold), в поле Size размер шрифта, а в списке Family выбрать один из возможных стилей начертания шрифта. Кнопкой Sample Color напротив надписи Foreground Color можно задать цвет текста. После того, как все стили были сформированы, через вкладку Themes были созданы три темы: тема THEME_BUILDS для отображения зданий, тема THEME_STREET для отображения улиц и тема THEME_PARCELL для отображения земельных участков. На вкладке в верхнем левом углу находится список уже сформированных тем, содержащихся в репозитории метаданных, справа находятся поля основных параметров темы, а внизу вкладки находится табличка, которая в общем случае позволяет настраивать одно или более правил отображения темы. В списке Base Table выбирается пространственная таблица, объекты из которой будет отображать тема (в нашем случае это в порядке перечисления тем таблицы BUILDS, STREET и PARCELL, находящиеся в схеме MAP). В списке Geometry Column указывается колонка из указанной выше таблицы, которая имеет пространственный тип SDO_GEOMETRY. Для всех трех таблиц это будет поле GEOLOC. В нижней настроечной таблице в верхней строке для каждой создаваемой тематики в колонке Feature Style указывается стиль отображения пространственных объектов на карте (соответственно в порядке создания тем были указаны ранее подготовленные стили COLOR_BUILDS, LINE_STREET и COLOR_PARCELL). В колонке Label Col выбирается столбец пространственной таблицы, из которой будут браться данные для надписей (соответственно в порядке создания тем были указаны поля: колонка NUM из таблицы BUILDS, содержащая номера домов, колонка NAME из таблицы STREET, содержащая названия улиц и колонка KU таблицы PARCELL, содержащая номера земельных участков). В следующей колонке Label Style указывается стиль текста надписей (соответственно в порядке создания тем были указаны стили TEXT_BUILDS, TEXT_STREET и TEXT_PARCELL). В поле Label Func для всех трех тем были указаны 1. После завершения создания тем через вкладку Maps была сформирована базовая карта. В поле Name было указано имя базовой карты MAP_DEMO. В нижней таблице был сформирован список из ранее созданных тем, которые будут отображаться на карте. Темы были указаны в том порядке, в котором они должны отрисовываться (первой указана тема THEME_PARCELL, затем THEME_STREET в самом конце тема THEME_BUILDS). Колонки Min Scale и Max Scale были оставлены пустыми. Имя сформированной карты используется при формировании запросов к MapViewer. Запросы, задействованные в задаче Как было показано на схеме выше, основная последовательность действий клиента при работе с MapViewer является следующей: поиск запущенного экземпляра MapViewer, присоединение к нему, отправка картографического XML запроса и обработка результата, полученного от экземпляра MapViewer. Запрос к сервлету MapViewer имеет следующий формат: http://hostname[:port]/MapViewer-servlet-path?xml_request=xml-request В отправляемом запросе необходимо указать источник данных и один или более необходимых параметров:
В нашем конкретном случае, генерируя HTML-страницу, PL/SQL-процедура выполняет непосредственно один запрос к MapViewer вида: 'http://hostserver:8888/mapviewer/omserver? xml_request='<?xml version="1.0" standalone="yes"?> <map_request datasource="ds_demo" basemap="map_demo" width="640" height="480" bgcolor="#FFFFFF" antialiasing="false" format="GIF_URL"> <center size="[size]"> <geoFeature> <geometricProperty> <Point> <coordinates>[x],[y]</coordinates> </Point> </geometricProperty> </geoFeature> </center> </map_request> где · hostserver:8888/mapviewer/omserver - сервер MapViewer · datasource="ds_demo" - параметр запроса, определяющий источник данных, настроенный ранее для MapViewer · basemap="map_demo" - параметр, определяющий имя базовой карты, и включающей в себя все необходимые метаданные, необходимые для формирования и отображения карты. · width="640" height="480" - эти параметры задают размеры в пикселах результирующего изображения карты · bgcolor="#FFFFFF" - параметр задает RGB-цвет фона изображения карты, поверх которого отрисовывается все остальное. · antialiasing="false" - параметр сглаживания ступенчатости на изображении карты. · format="GIF_URL" - параметр, указывающий MapViewer, что необходимо сформировать изображение карты и вернуть ссылку на него. · <center>...</center> - раздел, определяющий участок карты, котрый нужно отобразить на результирующем изображении. · size="[size]" - параметр определяющий размер карты. · <geoFeature>...</geoFeature> - раздел указывающий MapViewer, что положение отображаемого участка карты будет задано при помощи пространственного объекта (в нашем случае при помощи точки). · <geometricProperty>...</geometricProperty> - подраздел задает геометрические параметры пространственного объекта. · <Point>...</Point> - этим подразделом конкретизируется, что в качестве пространтсвеннгшо объекта будет указана точка. · <coordinates>[x],[y]</coordinates> - а здесь уже конкретно указываются координаты точки в единицах измерения и системе координат карты Организация PL/SQL-процедуры для обработки запросов Web-браузера PL/SQL-процедура использует приведенный выше XML-запрос к MapViewer, чтобы получить ссылку на изображение карты, подставив в него входные параметры размера карты и координаты центральной точки. Данная ссылка используется, чтобы сформировать HTML-документ и в дальнейшем будет использована браузером, чтобы запросить у Web-сервера файл изображения карты. Ниже приводится фрагмент текста простой процедуры, содержащий ключевые моменты реализации -------------------------------------------------------------------------------------------- PROCEDURE map_view( map_size IN VARCHAR2 DEFAULT NULL, map_x IN VARCHAR2 DEFAULT NULL, map_y IN VARCHAR2 DEFAULT NULL, ) IS size_par NUMBER; -- размер карты x_par NUMBER; -- координата X центра карты y_par NUMBER; -- координата Y центра карты delta_ NUMBER; -- величина инкремента/декремента смещения центра карты при навигации
l_http_req utl_http.req; l_url varchar2(4000); l_value varchar2(4000); img_url varchar2(4000); -- URL изображения response sys.xmltype; map_req varchar2(4000); BEGIN size_par := to_number(map_size); x_par := to_number(map_x); y_par := to_number(map_y); delta_ := round(size_par/3,2); -- организация запроса к MapViewer l_url := 'http://hostserver:8888/mapviewer/omserver'; utl_http.set_persistent_conn_support(TRUE); map_req := '<?xml version="1.0" standalone="yes"?> <map_request datasource="ds_demo" basemap="map_demo" width="640" height="480" bgcolor="#FFFFFF" antialiasing="false" format="GIF_URL"> <center size="'//map_size//'" > <geoFeature> <geometricProperty> <Point> <coordinates>'//map_x//','//map_y//'</coordinates> </Point> </geometricProperty> </geoFeature> </center> </map_request>'; -- отправка запроса к MapViewer l_http_req := utl_http.begin_request(l_url, 'POST', 'HTTP/1.0'); utl_http.set_header(l_http_req, 'Content-Type','application/x-www-form-urlencoded'); utl_http.set_header(l_http_req, 'Content-Length', length('xml_request='//map_req)); utl_http.set_header(l_http_req, 'Host', 'zemhp'); utl_http.set_header(l_http_req, 'Port', '8888'); utl_http.write_text(l_http_req, 'xml_request=' // map_req); -- получение URL изображение карты l_http_resp := utl_http.get_response(l_http_req); utl_http.read_text(l_http_resp, l_value); response := sys.xmltype.createxml (l_value); utl_http.end_response(l_http_resp); img_url := response.extract('/map_response/map_image/map_content/@url').getstringval(); -- генерация HTML-страницы htp.htmlOpen; htp.headOpen; htp.title( 'Демонстрационное приложение' ); htp.headClose; htp.bodyOpen; htp.tableOpen('border=0'); htp.prn('<tr>'); -- ячейка таблицы, содержащая изображением карты htp.prn('<td colspan=6><img class=borderall src='''//img_url//''' width="640" height="480"></td>'); htp.prn('</tr>'); -- ячейки таблицы, содержащие вызовы данной PL/SQL-процедуры для организации навигации htp.prn('<tr>'); htp.prn('<td><img src="in.png" alt="Увеличить" onclick="location=''web.map_view?map_size='//to_char(size_par-delta_)//'&map_x='//map_x//'&map_y='//map_y//'""></td>'); htp.prn('<td><img src="out.png" alt="Уменьшить" onclick="location=''web.map_view?map_size='//to_char(size_par+delta_)//'&map_x='//map_x//'&map_y='//map_y//'""></td>'); htp.prn('<td><img src="left.png" alt="Влево" onclick="location=''web.map_view?map_size='//map_size//'&map_x='//to_char(x_par+delta_)//'&map_y='//map_y//'""></td>'); htp.prn('<td><img src="up.png" alt="Вверх" onclick="location=''web.map_view?map_size='//map_size//'&map_x='//map_x//'&map_y='//to_char(y_par+delta_)//'""></td>'); htp.prn('<td><img src="down.png" alt="Вниз" onclick="location=''web.map_view?map_size='//map_size//'&map_x='//map_x//'&map_y='//to_char(y_par-delta_)//'""></td>'); htp.prn('<td><img src="right.png" alt="Вправо" onclick="location=''web.map_view?map_size='//map_size//'&map_x='//to_char(x_par-delta_)//'&map_y='//map_y//'""></td>'); htp.prn('</tr>'); htp.tableClose; htp.bodyClose; htp.htmlClose; END; ---------------------------------------------------------------------------------------- Связка Web-браузер, Web-сервер и PL/SQL-процедура работает по рекурсивному принципу, так как каждый раз вновь генерируемая процедурой HTML-страничка содержит обратный вызов самой PL/SQL-процедуры, но уже с модифицированными относительно текущего состояния параметрами вызова. Это обеспечивает управление логикой запросов MapViewer и обеспечивает навигацию по плану посредством серии запросов данной HTML-страницы.
Управление MapViewer при помощи административных запросов Основное использование MapViewer заключается в обработке различных запросов. Однако, MapViewer также принимает различные административные (то есть не картографические) запросы. К ним, например относится добавление источника данных при помощи прикладного интерфейса XML. Во все административные запросы вложен элемент <non_map_request> Административные запросы используются для следующих основных задач:
Наиболее типичным является использование административных запросов управления кэшем MapViewer. MapViewer использует два типа кэша:
Например, если был изменен какой либо из стилей, участвующих в формировании карты, то для того, чтобы эти изменения вступили в силу, необходимо либо перезапустить MapViewer, либо воспользоваться соответствующим административным запросом. Пример подобного запроса: <?xml version="1.0" standalone="yes"?> <non_map_request> <clear_cache data_source="ds_demo"/> </non_map_request> В результате выполнения данного запроса очищается текущий кэш метаданных и MapViewer загружает метаданные из сервера базы данных. Заключение. Как и любое технологическое решение MapViewer имеет преимущества и недостатки. Преимущества :
Недостатки:
На наш взгляд, это средство может быть эффективно использовано в типичных системах отображения информации различного назначения как промышленного, так и коммерческого применения (муниципальном и региональном управлении, отображения в задачах позиционирования объектов с использованием мобильных терминалов и пр.). Однако для решения специфических задач редактирования, сложной обработки картографической информации следует ориентироваться на специализированные ГИС-системы. Во всяком случае, до тех пор, пока фирма Oracle не разработает собственную полнофункциональную ГИС-систему или, по собственной коммерческой традиции, не приобретет фирму-производителя подобных решений. Ссылки по теме
|
|