Интеграция Oracle Spatial с Google Earth

Источник: oracle
Джастин Локитц, директор по профессионально-техническому обеспечению сбыта компании Leica Geosystems

Узнайте, как использовать Oracle Locator/Oracle Spatial, GeoServer и Google Earth для создания единой, надежной системы BI с возможностями определения местоположения.

Мир зациклился на технологиях для работы с местоположениями. Неважно, ищут ли люди с помощью Google Earth свои дома, отслеживают ли с помощью сотовых телефонов, поддерживающих GPS, своих детей или используют встроенные в архитектуру Oracle своих предприятий возможности, позволяющие определять местоположение. В любом из перечисленных случаев создается впечатление, что мало того, что все интересуются всей этой всячиной, связанной с местоположением, но и сама жизнь и бизнес людей также зависят от этого. Однако, как и для любого другого набора процветающих технологий при увеличении числа возможных технологических выборов, то же самое происходит и с числом сложностей и форматов данных. Вот тут-то и вступает в игру сообщество разработчиков открытого программного обеспечения.

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

Например, когда дело доходит до совместного использования данных, с картами или без них, лучшим из всех является Confluence GeoServer ( http://docs.codehaus.org/display/GEOS/Home ) - сервер c открытым исходным кодом, который может использоваться для подключения несоизмеримых геопространственных источников данных. Разработчики GeoServer считают свой проект идеальным "клеем" для геопространственной Web-Сети.

В принципе, GeoServer удивительно прост. Скажем, у вас имеются некоторые данные, хранящиеся в базе данных Oracle Spatial, и вы хотите опубликовать эти данные в Web в формате, который можно будет использовать другими пакетами программ, например, Google Earth. Чтобы сделать это, вы, конечно, могли бы определить таблицу стилей XML или некоторый другой процесс вывода, чтобы перевести исходные данные в KML (стандартный язык разметки Google Earth). Однако чтобы сделать это эффективно, вы, вероятно, захотите учесть все известные геометрические типы, так же, как и любые метаданные и/или данные, связанные с геометрическими формами (материал, который действительно имеет значение).

Для одноразового проекта, это могло бы быть не так уж и плохо. Но если вы желаете применить ваш доморощенный механизм преобразования к нескольким наборам данных и дизайнам данных, то вам придется проделать много работы, чтобы сначала создать структуру преобразования, способную к обработке всех сложностей обоих источников данных - и вашего, и Google Earth - а затем обработать фактические преобразования.

А что вы сделаете, если ваши потребности или данные (исходные и на выходе), изменятся? Применение GeoServer делает этот весь процесс намного более простым. Предоставляя возможности элементарного обеспечения связи с таблицами опции Oracle Locator/Oracle Spatial из Oracle Database, GeoServer может выполнять простые запросы ограничивающего прямоугольника Oracle Spatial (запросы первичного фильтра), преобразовывать результаты в KML и предоставлять выход KML как сервис для Google Earth для формирования изображения на карте. Это привлекательное, недорогое решение для простых геопространственных запросов.

В предлагаемой статье рассказывается о том, как использовать Oracle Locator/Oracle Spatial, GeoServer и Google Earth для создания устойчивой легко сочетаемой системы для сбора, обработки и анализа деловой информации с поддержкой определения местоположения. Я надеюсь, что в конце знакомства со статьей вы сможете выйти из этого упражнения с лучшим пониманием того, как использовать открытые исходные технологии для расширения числа способов, которыми вы используете коммерческие технологии.

Oracle Locator/Oracle Spatial - учебник для начинающих

Одной из самых мощных, но наименее понимаемых возможностей системы управления реляционными базами данных Oracle (начиная с Oracle Express и до Oracle Enterprise Edition) является Oracle Locator. По определению, "Oracle Locator представляет опцию Oracle Database 10 g Standard Edition и Enterprise Edition, предоставляющую базовые функциональные возможности определения местоположения, требующиеся большинству приложений заказчиков". Однако Oracle Locator предлагает намного больше этого. На самом деле, Oracle Locator дает пользователям возможность хранения информации о местоположении (геопространственной или другой), например, долготы и широты, в тех же самых таблицах и строках, что и остальная часть данных. Но Oracle Locator идет еще дальше: используя эту стандартную возможность, пользователи с теми же самыми данными могут также выполнить анализ местоположения.

Так, когда вы просто хотите возвратить всю информацию о чем-то, что происходит в пределах некоторого расстояния от чего-то еще, зачем обращаться к карте или к географической информационной системе (ГИС)? Ведь Oracle Locator может сделать это для вас прямо в базе данных. И, конечно, применительно к Oracle Spatial (опция Oracle Enterprise Edition), кроличья нора становится более глубокой - намного более глубокой. По сути, Oracle Locator и Oracle Spatial - это, действительно, одно и то же. Они совместно используют один и тот же основной тип объекта (SDO_GEOMETRY), а также и те же самые метаданные и схему индексации.

Однако в то время как Oracle Locator предоставляет внушительные функциональные возможности основного анализа местоположений (например, способность находить все данные, которые имеют некоторые топологические отношения с другими данными), Oracle Spatial строит поверх этого возможность для хранения и управления изображением и данными и метаданными с географической привязкой. Эта опция создает и анализирует линейные модели данных (сетевую и топологическую); превращает базирующуюся на тексте адресную информацию в долготу/широту с геокодированием; предлагает направления движения посредством интегрированного механизма маршрутизации; и выполняет глубокий многомерный пространственный анализ и глубинный анализ местоположения и других данных. Самое главное и для Oracle Locator, и для Oracle Spatial - это то, что данные и анализ являются доступными для любого клиента, который может подключиться к базе данных Oracle и делать к ней запросы.

Загрузите набор данных округов

Образец набора данных, включенный в демонстрационный код counties.dmp, состоит из двух таблиц, COUNTIES и STATES, а также метаданных Oracle Spatial и связанных индексов. Чтобы загрузить этот набор данных в вашу базу данных Oracle, проделайте следующее:

  1. Войдите в ваш экземпляр базы данных Oracle как пользователь с системными привилегиями: $>SQLPLUS system/password.
  2. Создайте нового пользователя базы данных (назовите его любым понравившимся вам именем - я обычно выбираю имя ORAGIS): SQL> create user oragis identified by oragis.
  3. Предоставьте вашему новому пользователю привилегии ресурса и подключения: SQL> grant resource, connect to oragis.
  4. Выйдите из Oracle: SQL> exit.
  5. Импортируйте (ранее экспортированный) файл дампа COUNTIES в схему ORAGIS (или вашего пользователя): $> imp oragis/oragis file=counties.dmp full=y.

Взглянем на объекты базы данных

Начиная с этого момента, у вас имеется все, что нужно, чтобы начать "задавать" Oracle Locator свои вопросы об отношениях между геопространственными и не геопространственными данными. Но прежде чем продолжить, давайте рассмотрим те структуры, которые добавлены к базе данных и как они работают. Для этого:

  1. Войдите в свою базу данных Oracle как пользователь, который "владеет" данными об округах: $> sqlplus oragis/oragis.
  2. Выполните команду DESCRIBE для таблицы округов, чтобы увидеть, из чего она состоит: SQL> desc counties.

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

Name             Null? Type  
GEOM             MDSYS.SDO_GEOMETRY  
COUNTY           VARCHAR2(31)  
FIPSSTCO         VARCHAR2(5)  
STATE            VARCHAR2(30)  
STATE_ABRV       VARCHAR2(2)  
FIPSST           VARCHAR2(2)  
LANDSQMI         NUMBER  
TOTPOP           NUMBER  
POPPSQMI         NUMBER  

Как можно видеть, большая часть информации в этой таблице состоит из текста (VARCHAR2) и чисел (NUMBER). Однако, строке GEOM, в которой хранятся фактические ординаты, составляющие геометрические представления для ваших округов, предписан тип базы данных MDSYS.SDO_GEOMETRY. Если более пристально взглянуть на этот тип, вы увидите, что его можно описать следующим образом:

SQL> desc SDO_GEOMETRY

 

Name

Null?

Type

SDO_GTYPE

NUMBER

COUNTY

NUMBER

SDO_POINT

MDSYS.SDO_POINT_TYPE

SDO_ELEM_INFO

MDSYS.SDO_ELEM_INFO_ARRAY

SDO_ORDINATES

MDSYS.SDO_ORDINATE_ARRAY

Из этого описания и Руководства пользователя и справочника по Oracle Spatial (http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14255/toc.htm) вы можете определить несколько характеристик сохраняемых данных:

  • SDO_GTYPE описывает тип геометрической формы (точка, ломаная линия или многоугольник).
  • SDO_SRID используется для идентификации системы координат.
  • DO_POINT описывает широту и долготу.
  • SDO_ELEM_INFO описывает, как использовать числа, хранящиеся в разделе SDO_ORDINATES.
  • SDO_ORDINATES описывает координатные значения, которые составляют границу пространственного объекта.

Глядя на данные единственного столбца....

SQL> select geom from counties where county = 'San Francisco';

GEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)

SDO_GEOMETRY(2003, 8265, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1),
SDO_ORDINATE_ARRAY(-122.3915, 37.707813, -122.3916, 37.708401,
-122.38088, 37.710056, -122.37258, 37.718094, -122.36247, 37.715759, -122.35625, 37.730015,
-122.36532, 37.732609....))

видно, что вне зависимости от того, храните ли вы точки, линии или многоугольники (как в этом примере), управление всеми данными происходит в пределах одного типа (и в одном столбце). Так что вам нет необходимости волноваться об осложнениях, связанных с использованием двоичных данных; другими словами, это скорее "белый ящик", чем реализация черного ящика. При хранении данных о местоположении таким способом учитывается гибкость, наряду с доступом через такие стандартные интерфейсы доступа, как SQL, JDBC и ODBC.

Индексация R-дерева Oracle Spatial

В Oracle Spatial предлагается мощная индексация, которая называется индексом в виде R-дерева. В "Руководстве пользователя и справочнике по Oracle Spatial" сказано: "пространственный индекс, как и любой другой индекс, предоставляет механизм ограничения поисков, но в нашем случае этот механизм основан на таких пространственных критериях, как пересечение и сдерживание. Пространственный индекс необходим для:

  • Нахождения в пределах индексированного пространства данных объектов, которые взаимодействуют с заданной точкой или областью, представляющими интерес (оконный запрос)
  • Нахождения пар объектов изнутри двух индексированных пространств данных, которые пространственно взаимодействуют друг с другом (пространственное объединение)"

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

Сделайте запрос к данным

После того как данные будут загружены, вы можете выполнить интересные операции анализа, например, следующие:

"Покажите мне любые округа, которые находятся внутри, охвачены и/или касаются штата Калифорния (которые не могут быть удовлетворены непространственным запросом по скалярным атрибутам штата)".

select /*+ ordered */ c.COUNTY,c.STATE_ABRV,c.TOTPOP,c.POPPSQMI 
from states s, counties c
where s.state = 'California'
and sdo_anyinteract (c.geom, s.geom) = 'TRUE';

Здесь вы просите, чтобы Oracle Database возвратила все округа, у которых имеется топологическое взаимодействие любого вида со штатом Калифорния. В результате этого запроса должны быть возвращены все округа штата Калифорния, а также округа штатов Орегон, Невада и Аризона - 74 из 3 300 округов США. Невозможно разрешить этот запрос при использовании только столбца STATE в таблице COUNTIES, потому что в таком случае не будут включены округа из других штатов, которые примыкают или имеют любое другое взаимодействие с Калифорнией.

С этого момента у вас имеется надежный фундамент для выполнения еще более интересного, визуального анализа на основании таблицы COUNTIES. Прежде чем вы решите быстро и энергично приступить к использованию Oracle Locator или Oracle Spatial для управления всеми вашими данными, вы, наверное, захотите посмотреть на следующие веб-сайты и документы:

oracle.com/technology/products/spatial/index.html
oracle.com/technology/products/spatial/htdocs/training.html
oracle.com/technology/obe/10gr2_db_vmware/datamgmt/spatial/spatial.htm

Преобразование данных Oracle с помощью GeoServer

Согласно сайту Confluence Web, GeoServer "является сервером открытого исходного кода, который подключает вашу информацию к геопространственной Web-Сети". Другими словами, как было ранее упомянуто в этой статье, GeoServer может действовать как коммуникационный мост между другими геопространственными сервисами/серверами. С помощью этого моста форматы данных могут быть легко (на лету) и динамически преобразованы. Для наших целей это огромное преимущество. Даже принимая во внимание, что вы всегда можете написать немного кода (на PL/SQL, Java, PHP), чтобы вывести данные Oracle Locator/Oracle Spatial, как KML для Google Earth, это не всегда практично. Плюс к этому - здесь то самое место, где серверы с открытым программным обеспечением, типа GeoServer, просто сияют.

Инсталляция GeoServer

Чтобы начать работу с GeoServer, проделайте следующее:

  1. Перейдите на домашнюю страницу Confluence-GeoServer (http://docs.codehaus.org/display/GEOS/Home) .
  2. Прочтите часть мелкого шрифта и предпосылок (http://docs.codehaus.org/display/GEOSDOC/Quickstart) из документа Quickstart.
  3. Загрузите ( http://docs.codehaus.org/display/GEOS/Latest ) и установите самую новую версию GeoServer.
  4. Загрузите (http://downloads.sourceforge.net/geoserver/geoserver-1.5.0-oracle-plugin.zip) и установите самую новую версию Oracle DataStore Extension for GeoServer.

Прежде, чем вы сделаете это, можно увидеть, что загружается в GeoServer по умолчанию. Для этого:

  • Стартуйте GeoServer и перейдите на домашнюю страницу GeoServer: http://localhost:8080/geoserver.
  • Кликните по Config: http://localhost:8080/geoserver/config/index.do.
  • Войдите, используя admin/geoserver как имя/пароль пользователя по умолчанию.
  • Снова кликните по Config: http://localhost:8080/geoserver/config/index.do.
  • Кликните по Data: http://localhost:8080/geoserver/config/data/index.do.
  • Кликните по Stores: http://localhost:8080/geoserver/config/data/store.do.
  • Кликните по New: http://localhost:8080/geoserver/config/data/storeNew.do.

Заметим, что если вы пытаетесь создать новое хранилище данных, не установив сначала Oracle DataStore Extension for GeoServer, опции подключения Oracle в списке не обнаруживаются.

Инсталляция Oracle DataStore Extension

Для инсталляции Oracle DataStore Extension for GeoServer:

  • Разархивируйте geoserver-1.5.0-oracle-plugin.zip в его собственный каталог.
  • Скопируйте gt2-oracle-spatial-2.3.1.jar и ojdbc14.jar в каталог [GEOSERVER_HOME]\Webapps\geoserver\WEB-INF\lib.
  • Перезапустите GeoServer.
  • Когда вы будете проходить подэтапы описанного выше шага 4 и достигнете шага g, вы должны увидеть в списке свойств два листинга для Oracle, когда вы пытаетесь создать новое хранилище данных.

Конфигурация GeoServer для Query Oracle Database

После того как Oracle DataStore Extension for GeoServer был успешно инсталлирован, вы можете использовать GeoServer, чтобы делать непосредственные запросы к базе данных Oracle.

Создание хранилища данных GeoServer Data Store для Oracle Database

Теперь, когда GeoServer установлен и функционирует и инсталлирована Oracle DataStore Extension, надо сконфигурировать GeoServer, чтобы можно было делать запросы к ранее импортированной таблице COUNTIES. Для этого:

  1. Кликните по Config снова: http://localhost:8080/geoserver/config/index.do.
  2. Кликните по Data: http://localhost:8080/geoserver/config/data/index.do.
  3. Кликните по Stores: http://localhost:8080/geoserver/config/data/store.do.
  4. Кликните по New: http://localhost:8080/geoserver/config/data/storeNew.do.
  5. Выберите Oracle из списка свойств и назовите ваше хранилище oragis (см. рисунок 1).


    Рисунок 1: Выберите Oracle как новый GeoServer DataStore [расположен в каталоге /technology/pub/images/lokitz-spatial-geoserver-f1.gif; во всех других изображениях используется то же самое соглашение об именах]

  6. Оставьте topp как значение по умолчанию для пространства имен и заполните информацию о хосте, порте, имени пользователя, пароле и экземпляре (СИД или сервис) для экземпляра Oracle, в который вы импортировали таблицу COUNTIES (см. рисунок 2).
  7. Кликните по кнопке Submit.


    Рисунок 2: Создание нового Oracle DataStore в рамках структуры GeoServer

  8. Кликните по кнопке Apply в левом верхнем углу, а затем по кнопке Save. В этот момент ваше хранилище данных должно быть сохранено и загружено (как файл XML) без инцидентов.

Создайте для округов тип объекта GeoServer

После загрузки данных вы будете хотеть создать тип объекта, представление для некоторых данных из вашего хранилища данных. Для этого:

  1. Cнова перейдите к меню Config -> Data: http://localhost:8080/geoserver/config/data/index.do
  2. Кликните по FeatureType: http://localhost:8080/geoserver/config/data/typeSelect.do.
  3. Нажмите New: http://localhost:8080/geoserver/config/data/typeNew.do.
  4. Выберите oragis:::COUNTIES из списка Feature Type Name (см. рисунок 3).


    Рисунок 3: Выбор таблицы COUNTIES для вашего нового объекта GeoServer

  5. Кликните по New.
  6. Заполнить форму объекта следующими значениями (см. рис. 4):
    a. Стиль: многоугольник.
    b. SRS: 4326.
    c. Заголовок: COUNTIES.
    d. Ограничивающий прямоугольник: кликните по Generate.
    e. Оставьте остальным значениям их значения по умолчанию.

*Примечание: В пункте d конфигурируется запрос ограничивающего прямоугольника первичного фильтра к Oracle Spatial. GeoServer в настоящее время не поддерживает общих геопространственных запросов для отыскания местоположения, типа "самый близкий сосед" или "в пределах расстояния" или других типов запросов отношений. Однако Oracle Application Server MapViewer - опция каждого сервера приложений Oracle - полностью поддерживает эти виды запросов и многие другие.

  1. Кликните по Submit.


    Рисунок 4: Создание типа объекта для ваших данных COUNTIES

  2. Кликните по кнопке Apply в левом верхнем углу, а затем по Save. В этот момент ваш тип объекта (метаданные) должен быть сохранен и загружен (как файл XML) без инцидентов.

Стили карт

Теперь вы готовы тестировать подключение GeoServer к вашему хранилищу данных и типу объекта. В этот момент вы должны быть в состоянии выводить данные в нескольких форматах, основанных на таблице COUNTIES. Однако, потому что вы применили к нашему объекту только простой стиль многоугольника, возможно, на ней будет можно увидеть не слишком много. После быстрого теста подключения вы создадите более интересную стилизацию набора данных. А пока:

  1. На домашней странице GeoServer кликните по WMS Capabilities: http://localhost:8080/geoserver/wms?service=WMS&request=GetCapabilities.
  2. Здесь вы увидите документ/страницу XML со списком возможностей вашей реализации GeoServer. С помощью прокрутки просматривайте список, пока не найдете строку <Name> topp:COUNTIES </Name>. Здесь вам будет сказано, что именно в состоянии вывести сервер WMS, как часть GeoServer, (см. рисунок 5).


Рисунок 5: Вывод GeoServer в WMS-XML

Получите в браузере изображение карты с GeoServer

Чтобы протестировать ваш объект COUNTIES, откройте новое окно браузера и перейдите к следующему URL:
http://localhost:8080/geoserver//wms?service=WMS&request=GetMap&format=image/
png&width=800&height=600&srs=EPSG:4326&layers=topp:COUNTIES
&styles=polygon&bbox=-177.1,13.71,-61.48,76.63

Это запрос WMS, который указывает GeoServer вывести изображение типа PNG шириной 800 пикселей и высотой 600 пикселей, с SRS (система координат) 4326, для объекта COUNTIES, с очень простым стилем многоугольника и в пределах ограничивающего прямоугольника следующих размеров: минимальная долгота (-177.1), минимальная широта (13.71), максимальная долгота (-61.48) и максимальная широта (76.63).

После обработки вашего запроса GeoServer должен возвратить изображение, которое похоже на рисунок 6:


Рисунок 6: Пример вывода WMS для типа объекта COUNTIES

В этот момент вы готовы интегрировать (используя объект GeoServer) вашу таблицу Oracle с Google Earth. Прежде чем сделать это, мы исследуем, как использовать стили отображения, чтобы определить более интересное и описательное предоставление информации об округах. Для этого вы должны применить новый стиль (или стилизованный описатель уровня) к вашему объекту.

Создание стилизованного описателя уровня

Стилизованный описатель уровня, или SLD, делает ваши карты красочными. Он указывает серверу, как должна быть визуализирована карта - например, рисовать ли линии черным или закрасить их синим с хорошим контуром и текстовой меткой. SLD - это язык на базе XML, детализированный в открытой спецификации, доступной здесь (http://www.opengeospatial.org/docs/02-070.pdf). Файлы SLD, созданные для GeoServer, могут быть многократно использованы в любом приложении, соответствующем Web Mapping Service (WMS) (http://docs.codehaus.org/display/GEOSDOC/1.3+Style+Your+Map).

На следующем шаге должен быть создан SLD для стилизации карты округов США. В упомянутой обучающей программе на веб-сайте GeoServer предлагаются детализированные команды. Альтернативно, могут использоваться как шаблоны несколько SLD, которые приходят в комплекте с GeoServer. Один SLD, который может быть использован для наших потребностей, называется popshade.sld. Чтобы увидеть описание этого SLD, проделайте следующее:

  1. Перейдите к каталогу [GEOSERVER_HOME]\data_dir\styles.
  2. В текстовом редакторе откройте popshade.sld.

Использование разделов правил и фильтров SLD

При движении по этому документу вы можете заметить несколько вещей:

  • Внутри тэга <FeatureTypeStyle> имеется несколько разделов <Rule>.
  • В пределах разделов с правилами (rules) есть разделы фильтра (<ogc:Filter..>), которые описывают, какие скалярные свойства следует искать для заданного типа, а также, какую логику выполнять. Например, в первом разделе правил есть фильтр, который определяет, что это правило применимо только к данным в пределах объекта, для которого значение PERSONS лежит между 2 000 000 и 4 000 000.
<ogc:Filter xmlns:gml="http://www.opengis.net/gml">
   <ogc:PropertyIsBetween>
    <ogc:PropertyName>PERSONS</ogc:PropertyName>
    <ogc:LowerBoundary>
     <ogc:Literal>2000000</ogc:Literal>
    </ogc:LowerBoundary>
    <ogc:UpperBoundary>
     <ogc:Literal>4000000</ogc:Literal>
    </ogc:UpperBoundary>
   </ogc:PropertyIsBetween>
 </ogc:Filter>

В таблицу COUNTIES в Oracle Database включены данные атрибута округа (county) в дополнение к данным о местоположении, хранящимся в столбце GEOM. Эти данные атрибута могут использоваться, чтобы помочь нам определять правила, логику и стилизацию, которые будут иметь смысл при настройке деловой информации. Интересным элементом данных является POPPSQMI - плотность населения (количество жителей на квадратную милю для каждого округа). Когда вы применяете правила к этому набору данных, используя значения POPPSQMI, результаты будут выделены на карте.

Создание SLD для таблицы COUNTIES

Настройте SLD popshade.sld для таблицы COUNTIES (и объекта COUNTIES), редактируя SLD:

  1. Сохраните копию popshade.sld в другом каталоге (вне data_dir) как countypopshade.sld.
  2. Отредактируйте разделы названия, заголовка и резюме: <Name>CountyPopDensity </Name>
  3. Создайте несколько новых разделов правил, чтобы при визуализации данных GeoServer, он возвратил бы пять или шесть стилей затенения, основанных на значениях POPPSQMI.
  4. Для первого правила определите фильтр, который изучает значения POPPSQMI и применяет конкретный цвет и стиль текста на основании строк, где POPPSQMI меньше 10:
    <Rule>
        <!-- like a linesymbolizer but with a fill too -->
        <ogc:Filter xmlns:gml="http://www.opengis.net/gml">
        <ogc:PropertyIsLessThan>
        <ogc:PropertyName>POPPSQMI</ogc:PropertyName>
        <ogc:Literal>10</ogc:Literal>
          </ogc:PropertyIsLessThan>
        </ogc:Filter>
        <PolygonSymbolizer>
           <Fill>
              <!-- CssParameters allowed are fill (the color) and fill-opacity -->
              <CssParameter name="fill">#0000FF</CssParameter>
              <CssParameter name="fill-opacity">0.7</CssParameter>
    </Fill> </PolygonSymbolizer> <TextSymbolizer> <Label> <ogc:PropertyName>COUNTY</ogc:PropertyName> </Label> <Font> <CssParameter name="font-family">Times New Roman</CssParameter> <CssParameter name="font-style">Normal</CssParameter> <CssParameter name="font-size">10</CssParameter> </Font> <Fill> <CssParameter name="fill">#000000</CssParameter> </Fill> </TextSymbolizer> </Rule>
  5. Затем создайте несколько правил с фильтрами, где значение POPPSQMI лежит в интервале:
    <Rule>
        <!-- like a linesymbolizer but with a fill too -->
        <ogc:Filter xmlns:gml="http://www.opengis.net/gml">
          <ogc:PropertyIsBetween>
            <ogc:PropertyName>POPPSQMI</ogc:PropertyName>
            <ogc:LowerBoundary>
              <ogc:Literal>10</ogc:Literal>
            </ogc:LowerBoundary>
            <ogc:UpperBoundary>
              <ogc:Literal>1000</ogc:Literal>
            </ogc:UpperBoundary>
          </ogc:PropertyIsBetween>
        </ogc:Filter>
        <PolygonSymbolizer>
           <Fill>
            <!-- CssParameters allowed are fill (the color) and fill-opacity -->
            <CssParameter name="fill">#00FF00</CssParameter>
    	    <CssParameter name="fill-opacity">0.7</CssParameter>
           </Fill>     
        </PolygonSymbolizer>
        <TextSymbolizer>
    	<Label>
    	  <ogc:PropertyName>COUNTY</ogc:PropertyName>
           </Label>
    
          <Font>
    	    <CssParameter name="font-family">Times New Roman</CssParameter>
    	    <CssParameter name="font-style">Normal</CssParameter>
    	    <CssParameter name="font-size">10</CssParameter>
          </Font>
          <Fill>
    	    <CssParameter name="fill">#000000</CssParameter>
          </Fill>
        </TextSymbolizer>
     </Rule> 
    
  6. И, наконец, создайте правило для значений POPPSQMI, превышающих 30 000:
    <Rule>
        <!-- like a linesymbolizer but with a fill too -->
        <ogc:Filter xmlns:gml="http://www.opengis.net/gml">
          <ogc:PropertyIsGreaterThan>
           <ogc:PropertyName>POPPSQMI</ogc:PropertyName>
           <ogc:Literal>30000</ogc:Literal>
          </ogc:PropertyIsGreaterThan>
        </ogc:Filter>
        <PolygonSymbolizer>
           <Fill>
              <!-- CssParameters allowed are fill (the color) and fill-opacity -->
              <CssParameter name="fill">#FF0000</CssParameter>
    	      <CssParameter name="fill-opacity">0.7</CssParameter>
           </Fill>     
        </PolygonSymbolizer>
        <TextSymbolizer>
       <Label>
    	  <ogc:PropertyName>COUNTY</ogc:PropertyName>
    	</Label>
    
    	<Font>
    	  <CssParameter name="font-family">Times New Roman</CssParameter>
          <CssParameter name="font-style">Normal</CssParameter>
    	  <CssParameter name="font-size">10</CssParameter>
    	</Font>
    	<Fill>
    	  <CssParameter name="fill">#000000</CssParameter>
    	</Fill>
         </TextSymbolizer>
    </Rule>
    
  7. Пример законченного (хорошо структурированного) файла вы можете найти здесь: загрузить демонстрационный код.
  8. Сохраните свой новый SLD.

Загрузка SLD округов

Теперь вы будете должны загрузить наш новый SLD в GeoServer. Для этого:

  1. Перейдите кстранице Config -> Data -> Style для GeoServer: http://localhost:8080/geoserver/config/data/style.do.
  2. Кликните по New, чтобы создать новый стиль, основанный на вашем SLD: http://localhost:8080/geoserver/config/data/styleNew.do. Дайте файлу popshade.sld новое имя - countypopdensity (см. рисунок 7).


    Рисунок 7: Назначение нового стиля GeoServer (SLD)

  3. Найдите и выберите созданный вами файл countypopshade.sld (см. рисунок 8)
  4. Кликните по кнопке Submit.


    Рисунок 8: Создание стиля GeoServer, основанного на вашем заказном SLD

  5. Кликните по кнопке Apply в левом верхнем углу, а затем по кнопке Save. В этот момент ваш стиль должен быть сохранен и загружен (как файл XML) без инцидентов.

Ассоциирование SLD для округов с типом Counties

  1. Перейдите к меню Config -> Data -> FeatureType.
  2. Выберите oragis:COUNTIES из списка Feature Types, и кликните по кнопке Edit.
  3. Выберите countypopdensity из списка Styles (см. рисунок 9).


    Рисунок 9: Обновление типа объектов COUNTIES с помощью вашего нового стиля

  4. С помощью прокрутки дойдите до низа страницы и кликните по кнопке Submit.
    Кликните по кнопке Apply в левом верхнем углу, а затем по кнопке Save. В этот момент ваш обновленный тип объекта должен быть сохранен и загружен (как файл XML) без инцидентов.
    Теперь повторно запустите ваш запрос WMS, заменив countypopdensity для многоугольника параметром Style:
    http://localhost:8080/geoserver//wms?service=WMS&request=GetMap&format=image/png&width=800&height=600&srs=
    EPSG:4326&layers=topp:COUNTIES&styles=countypopdensity&bbox=-177.1,13.71,-61.48,76.63.
  5. Возвращенное изображение должно теперь выглядеть примерно так, как на рисунке 10:


    Рисунок 10: Пример выходных данных WMS для типа объекта COUNTIES с использованием вашего нового стиля

    Как видите, GeoServer использует некоторые фильтры и другие метаданные для создания запроса к базе данных Oracle, который возвращает набор данных, подходящий для тематического затенения. "За кулисами" запрос, который создается для возвращения набора результатов в пределах ограничивающего прямоугольника (-177.1,13.71,-61.48,76.63), использует оператор Oracle Locator/Oracle Spatial, который называется SDO_FILTER. Правда, нет никакого простого способа расширить сервер WMS, входящий в состав GeoServer, чтобы использовать более сложные запросы, типа того, который вы использовали в разделе "Запрос к данным". Но вы могли бы, конечно, использовать Oracle Spatial и MapViewer Oracle Application Server для разработки приложений, действительно, учитывающих усложненные запросы, которые выводятся при помощи собственных сервисов WMS Oracle Application Server MapViewer.

  6. Чтобы отразить ваши персональные настройки, вы можете пожелать использовать вышеупомянутые процедуры для обновления countypopshade.sld в соответствии с вашим собственным вкусом.

Теперь вы готовы интегрировать новый объект с Google Earth.

Интеграция Oracle Locator/GeoServer с Google Earth

Сейчас, когда все работы "из GeoServer в Oracle" выполнены, вы готовы приступить к заключительным шагам, посредством которых сможете интегрировать Oracle с Google Earth через GeoServer.

Используйте графический интерфейс пользователя Google Earth для просмотра данных Counties в Oracle Database

В Google Earth предлагается недорогой и гибкий способ просмотра не только информации о местоположениях, но также и геопространственных отношений на карте. Так же, как Oracle Locator и Oracle Spatial могут использоваться для обеспечения на сервере как геопространственного, так и не геопространственного анализа, Google Earth может быть использован как внешний пользовательский интерфейс для этого вида информации и анализа. Однако до сих пор имелось одно возражение. В том случае, если бы вы захотели "обвенчать" Oracle Database и Google Earth, то вы должны были создать к Oracle Database заказные интерфейсы, которые могли бы выводить KML или KMZ (языки разметки Google Earth - распакованный или сжатый). Либо вы могли купить себе Google Earth Enterprise и использовать сервисы группы Google Geospatial Sales Engineering, чтобы выполнить требующуюся вам интеграцию. Теперь же имеется еще одна, третья по счету и несколько более простая и гибкая опция: использовать для вывода из Oracle Spatial GeoServer KML/KMZ и снять с себя множество тяжелых обязанностей. С помощью GeoServer можно автоматически вывести KML/KMZ из Oracle Spatial, используя любой стандартный формат WMS, который мы видели ранее, в силу чего значение "формата" изменено, например, с PNG на application/vnd.google-earth.kml+XML:
http://localhost:8080/geoserver//wms?service=WMS&request=GetMap&format=application/
vnd.google-earth.kmz+XML&width=1024&height=1024&srs=EPSG:4326&layers=topp:COUNTIES
&styles=countypopdensity

Или же мы можем просто использовать KML Reflector, еще одну опцию GeoServer, которая просто инкапсулирует в упрощенный URL большую часть информации, которую мы включили бы в запрос WMS.

Чтобы позволить вам сделать это, на веб-сайте GeoServer http://docs.codehaus.org/display/GEOSDOC/Google+Earth имеется несколько прекрасных инструкций, которые приводятся здесь в сжатом виде:

  1. Запустите Google Earth.
  2. Двигайте глобус, пока вы не наведете его на искомую вами часть Соединенных Штатов Америки (см. рисунок 11).


    Рисунок 11: Наведение Google Earth на искомую вами точку Америки

  3. Выберите из меню Add пункт Network Link (см. рисунок 12).


    Рисунок 12: Открытие меню Network Link Google Earth

  4. Назовите вашу сетевую ссылку как-то вроде County Pop Density ("Плотность населения округа).
  5. Введите в поле Link URL KML/KMZ для вашего GeoServer (см. рисунок 13):


    Рисунок 13: Добавление информации о сетевой ссылке для вашего экземпляра GeoServer

    Заметим: согласно web-странице GeoServer-Google Earth (как отмечалось выше), утилита отражателя KML (KLM Reflector) была разработана, чтобы дать пользователям возможность легко выводить KML/KMZ, не имея необходимости "вылизывать" запросы WMS.

  6. Кликните по кнопке OK.
  7. Теперь вы должны увидеть ваши данные округов, помещенные поверх поставляемых Google Earth данных (см. рисунки 14 и 15). Очень круто!


Рисунок 14: Увеличивайте и уменьшайте размер окна и панорамируйте карту на различные области, чтобы увидеть новые представления данных


Рисунок 15: Ваши Oracle-данные для округов, интегрированные с Google Earth

Автоматическое обновление сетевых данных в Google Earth

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

  1. Кликните правой кнопкой мыши по вашей ссылке County Pop Density в разделе Places в Google Earth (см. рисунок 16).


    Рисунок 16: Редактирование свойств сетевой ссылки

  2. Кликните по вкладке Refresh и переключите некоторые из опций обновления.

Заключение

Вместе с увеличением полноценности информации о местоположениях, точно так же растет и число легко доступных (всегда имеющихся под руками) технологий, способных к использованию информации о местоположении. Как и для большинства других технологических тенденций, расширение использования данных означает увеличение числа приложений и форматов данных, что приводит к еще большей сложности. Например, даже притом, что такие мощные инструментальные средства, как Oracle Locator/Oracle Spatial и Google Earth делают рассматриваемые данные невероятно прозрачными и непосредственно полезными, оба этих инструментальных средства также добавляют сложность в полную архитектуру. Дело в том, что они не являются неотъемлемо интегрированными в том варианте, как они обычно поступают к пользователю (и это - только один из примеров). Сегодня один из самых эффективных и популярных способов решения врожденных проблем сложности, вызванных применением коммерческих программных решений, состоит в том, чтобы использовать открытые программные средства.

На сфере информации о местоположении лучшим примером открытого программного решения для наведения мостов является GeoServer. Располагая решениями типа GeoServer, мы больше не должны быть очень жесткими при выборе платформы, как это приходилось делать, когда дело доходило до создания, хранения, управления и использование данных о местоположении. Вместо этого мы можем теперь выбрать лучшее решение для работы и обратиться к сообществу разработчиков открытого программного обеспечения, чтобы они помогли нам в остальном.

В предлагаемой статье было проведено исследование именно этой темы: как связать два чрезвычайно популярных и мощных решения для получения информации о местоположении - Oracle Locator/Oracle Spatial и Google Earth, используя для этого известное, хорошо поддерживаемое решение GeoServer с открытым программным кодом. К концу был не только создан способ анализа местоположения и другой информации в Oracle Database, но и, благодаря использованию Google Earth, появилась возможность непосредственно подключить поверх этой информации прекрасный пользовательский интерфейс. В целом же была создана продвинутая система сбора, обработки и анализа деловой информации масштаба предприятия.


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=21164