Сервер переехал на новый сайт http://www.oraclegis.com/blog. Здесь идет ретрансляция

воскресенье, 28 сентября 2008 г.

Mapviewer 10.1.3.3 for Weblogic and OAS

Oracle опубликовал новую версию Mapviewer. Кто пользуется более ранними версиями, а также версиями 11g рекомендуется обновить до версии 10.1.3.3. По функциональности и уровню пропатченности это самая лучшая на данный момент версия.


Читать далее...

пятница, 26 сентября 2008 г.

gvSIG

UPDATE1: Начиная с версии 1.1.2 gvSIG для использование Oracle Spatial не требуется инсталлировать geoDB extension. Тем не менее все равно требуется скачать библиотеке ojdbc14.jar и положить ее в нужное место (см. ниже).

В мире в настоящее время используется большое количество open source GIS и в большинстве своем эти ГИС поддерживают Oracle Spatial, т.к. очевидно, что это один из самых распространенных форматов хранения пространственных данных.
Кроме того большинство из этих проектов зарождаются, либо спонсируются государственными и мунициальными организациями.
Сегодня мы рассмотрим одну из таких систем - gvSIG.
gvSIG — свободная геоинформационная система с открытым исходным кодом. Первая рабочая версия появилась в конце 2006 года и распространялась через интернет.

Системные требования
Pentium III 800 МГц
256 Мбайт RAM
Предлагаются исходный код, и готовые сборки для:

Microsoft Windows и Windows NT
GNU/Linux i586
Mac OS X Intel.
Программа поддерживает все необходимые функции ГИС:

Pабота со слоями, благодаря которой можно отображать лишь необходимые в данный момент объекты;
Функции масштабирования карты;
Поддержка сохранения необходимых ракурсов карты;
Автоматические расчёты расстояния между объектами и площадей областей;
Размещение активных объектов на карту;
Создание профессиональных географических карт с необходимыми элементами, которые можно впоследствии печатать.
Собственно, к системе есть небольшая документация, которую можно взять здесь.
Есть также драйвер для Oracle. К сожалению, в поставке он не идет.

Итак, давайте приступим к установке.

1. Скачать

Для инсталляция необходимо скачать
а) сам gvsig: http://www.gvsig.gva.es/index.php?id=1306&L=2&K=1
Отсюда берем версию 1.0.2. К сожалению, версия 1.1 не имеет готового драйвера к СУБД Oracle.
б) geoDB расширение (оно отвечает за поддержку Oracle): http://www.gvsig.gva.es/index.php?id=1656&L=2&K=1 
Берем само собой для версии 1.0.2.
в) драйвер ojdbc14.jar. Разработчики рекомендуют брать версию 1.4. Взять можно с сайта Oracle: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_10201.html link. Забираем версию 10.2.0.4. Файлик ojdbc14.jar.

2. Инсталляция

Основная инсталляция достаточно простая. Сложностей не возникает. Только под линуксом возникает небольшая сложность. При инсталляции gvSIG свою версию java (1.4.2) кидает в папку /root/gvSIG/jre. Это не позволяет в дальнейшем запускать gvSIG под обычным пользователем. Для решения проблемы нужно проинсталлировать в режиме по умолчанию. Скопировать jre в общедоступную папку. Проинсталлировать повторно, но при инсталляции указать наш jre в соответствующей папке.

После этого нужно проинсталлировать geoDB расширение, а файлик ojdbc14.jar положить в папку /opt/gvSIG_1.0.2/bin/gvSIG/extensiones/com.iver.cit.gvsig/lib/ (я инсталлировал в папку /opt/gvSIG_1.02

3. Запуск

Запускается файликом /opt/gvSIG_1.0.2/bin/gvSIG.sh (для линукса) и из меню в Windows.

1 

После запуска нужно настроить соединения с базой данных Oracle. Для этого заходим в меню Show->Geographic database connections wizard. В меню жмем Add и попадаем в диалог настройки соединения.

image

Настраиваем соединение.

gvSIG готов к работе с СУБД Oracle.

4. Работа

gvSIG умеет работать с Oracle Spatial, но он налагает ряд требований на таблицы, содержащие данные. Одно из них – это наличие первичного ключа (Primary Key). Кроме того, для редактирования необходимо также иметь триггер, заполняющий соответствующее поле.

Давайте, создадим таблицу, удовлетворяющую требованиям. Эта таблица будет содержать информацию о ресторанах в городе:

Также создаем индекс. Без индекса ничего работать не будет.

CREATE TABLE restaurants

  ( id   NUMBER PRIMARY KEY,  name VARCHAR2(30),  geom mdsys.sdo_geometry);

CREATE INDEX restaurants_spat_idx ON restaurants  (geom)  indextype IS mdsys.spatial_index;

Создаем также последовательность для генерации первичного ключа

CREATE SEQUENCE restaurants_pk_seq;

Создаем триггер для заполнения первичного ключа:

CREATE OR REPLACE TRIGGER RESTAURANTS_PK_TRIG BEFORE

   INSERT ON RESTAURANTS FOR EACH ROW BEGIN :new.id:=restaurants_pk_seq.nextval;

END;

Теперь необходимо зарегистрировать таблицу как слой

 INSERT INTO user_sdo_geom_metadata VALUES  ('restaurants','geom',

    MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X',-180,180,0.005),MDSYS.SDO_DIM_ELEMENT('Y',-90,90,0.005)) ,8307);

Теперь необходимо настроить отображение информации в gvSIG:

а) Запускаем gvSIG
б) Выбираем в Document Types – View, затем New
в) Появится новый View с именем Untitles – 0. Выбираем его и жмем Properties

image

г) Даем название, указываем проекцию базы данных. В нашем случае это будет WGS 84, Geodesica. Это обязательно сделать.

image

д) Соглашаемся и закрываем. Далее выбираем наше View. Жмем Open.

image

е) В панели инструментов выбираем Add Layer. В диалоге нам нужна закладка GeoBD. Выбираем соединение. Выбираем слой, который необходимо подключить.

image

ж) В результате откроется выбранный слой, с которым можно работать

image

з) Этот слой можно редактировать. Для этого слева щелкаем на названии слоя правой кнопкой и выбираем Start edition

image 
и) В панели инструментов выбираем инструмент Point. Щелкаем, делаем точки :) Для завершения редактирования и сохранения щелкаем правой кнопкой на слой и говорим “Finish edition”. Соглашаемся, что хотим сохранить слой.


Читать далее...

вторник, 9 сентября 2008 г.

Oracle Mapviewer 10.1.3.3 patch 5

Появилась новая версия Oracle Mapviewer. Исправлен ряд ошибок, но главной особенностью яваляется поддержка Oracle BEA Weblogic Server
Читать далее...

среда, 16 июля 2008 г.

Инсталляция Oracle Mapviewer 10.1.3.1 на Oracle BEWeblogic 10A

Oracle Mapviewer представляет собой стандартный пакет EAR, который можно разворачивать на любом J2EE-совместимом сервере приложений, а не только на Oracle Application Server (OAS).

К сожалению, даже J2EE-сервера имеют некоторые различия в реализации. Так, к примеру, OAS поддерживает разворачивание EAR архивов. При этом он распаковывает war архивы.
Oracle Weblogic не распаковывает архив. Запуск приложения происходит непосредственно из war архива. При этом у Weblogic - это поведение по умолчанию.

Для того, чтобы поведение было аналогично поведению OAS необходимо вручную распаковать архив и осуществлять развертывание в режиме exploded. Связано это с некорректной работой функции servletconfig.getServletContext().getRealPath("/"); Для приложений развернутых в виде war-архива эта функция возвращает NULL.

Ниже я привожу пошаговую инструкцию по инсталляции Oracle Mapviewer на Oracle Weblogic 10.

1. Скачиваем Oracle Weblogic 10 MP1.
2. Скачиваем Oracle Mapviewer 10.1.3.1 из ноты 7195504 на metalink
3. Инсталлируем Oracle Weblogic 10 с настройками по-умолчанию.
4.1 Запускаем Oracle Weblogic: $BEA_HOME/wlserver_10.0/server/bin/startWLS.sh.
4.2 Отвечаем на вопросы. Ждем пока появится сообщение 5.1 Копируем на сервер файл mapviewer.ear из пакета Oracle Mapviewer в любой каталог. И переименовываем его в mapviewer1.ear
5.2 Распаковываем mapviewer1.ear в каталог mapviewer.ear
5.3 Внутри каталога есть файл web.war. Переименовываем его в web1.war. Распаковываем его в каталог web.war
5.4 В поставке Oracle Weblogic 10 отсутствует библиотека xmlparserv2.jar. Ее можно взять из поставки OC4J и скопировать в каталог mapviewer.ear/web.war/WEB-INF/lib/
6.1 В новом терминальном окне идем, в каталог, куда распаковали mapviewer.ear
6.2 Запускаем настройку среды для WebLogic: ". $BEA_HOME/wlserver_10.0/server/bin/setWLSEnv.sh"
6.3 Разверачиваем приложение командой: java weblogic.Deployer -user system -password weblogic -deploy /home/oracle/mapviewer.ear
Читать далее...

четверг, 3 июля 2008 г.

При вот такой ошибке
javax.servlet.ServletException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified



Проблемы не с драйвером, а с самой XE.
Я, наверно, все возможные варианты перепробывал, и драйверов, и локалей, и параметров ОС.

Jdbc с XE работает только с англицкой локалью, это известная трабла, и во многих постах и статьях отмечена.

Вопрос был скорее в том, почему сервлеты BPEL-а не цепляют локаль из системы, если поставить языковые параметры ОС на английские. Ведь все jdbc-приложения (SQLDeveloper, Enterprise Manager 10g, irca - скрипты создания схем) в этом случае нормально работают с XE. И где, раз так, задать параметры локали для java вручную.

Нашел - в %ORACLE_HOME%\opmn\conf\opmn.xml (и ещё в opmn.xml.BPM и opmn.xml.ESB), есть параметры запуска инстансов сервера приложений. Туда и добавил параметры "-Duser.language=en -Duser.region=us". Если запуск осуществляется вручную, то те же самые параметры добавляем к вызову java-машины, например 

java -Duser.language=e -Duser.region=us myjavaclass 


Читать далее...
Oracle+SSO
Доступ к пространственным данным должен осуществляться после авторизации пользователя. Oracle Mapviewer как составная часть платформы Oracle Application Server предоставляет возможность интеграции системы аутенфикации.
Благодаря этому возможно:
1. Аутенфицировать пользователя на доступ к пространственным данным в Mapviewer
2. Авторизовать пользователя только на доступ к ограниченному объему данных в зависимости от привилегий.

Инструкция.
1. Инсталлируем базу данных Oracle, заливаем тестовую схему MVDEMO
2. Инсталлируем OC4J
3. Инсталлируем Mapviewer
4. Настраиваем аутенфикацию через SSO
4.1 Создаем пользователей через EM или через пакет jazn.jar, добавляем пользователей в роль users:
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com max max
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com george george
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com stacy stacy
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com alex alex

java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com max
java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com george
java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com stacy
java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com alex
4.2 Далее для простоты введем поле account_mgr и в него поместим имя менеджера для этого клиента. Разбиваем по фамилии клиента: если с буквы A и до G, то менеджер alex, с G и до M - george, и т.д.

alter table customers add (account_mgr varchar2(64));
update customers set account_mgr='alex' where substr(name,1,1)>='A' and substr(name,1,1) <'G'; update customers set account_mgr='george' where substr(name,1,1)>='G' and substr(name,1,1) <'M'; update customers set account_mgr='max' where substr(name,1,1)>='M' and substr(name,1,1) <'S'; update customers set account_mgr='stacy' where substr(name,1,1)>='S';

4.3 Создаем пакет, который в обязательно порядке имеет процедуру SET_USER и CLEAR_USER. При каждом обращении будет вызываться процедура SET_USER, а по завершению запроса CLEAR_USER. Пакет запоминает имя пользователя. Это имя в дальнейшем будет использовано для ограничения видимости клиентов.

CREATE OR REPLACE PACKAGE web_user_info
AS
PROCEDURE set_user (p_name IN VARCHAR2);
PROCEDURE clear_user;
FUNCTION get_user
RETURN VARCHAR2;
END;
/

CREATE OR REPLACE PACKAGE BODY web_user_info
AS
w_name VARCHAR2 (32767);

PROCEDURE set_user (p_name IN VARCHAR2)
AS
BEGIN
w_name := LOWER (p_name);
END;

PROCEDURE clear_user
AS
BEGIN
w_name := null;
END;

FUNCTION get_user
RETURN VARCHAR2
AS
BEGIN
RETURN w_name;
END;
END;
/

4.4 Создаем представление, которое будет отбирать данные по имени пользователя.

CREATE OR REPLACE VIEW customers_view
AS
SELECT * FROM customers
WHERE account_mgr = web_user_info.get_user;

4.5 Записываем метаданные для созданного представления (представление будет не видно в MapBuilder, поэтому создаем метаданные вручную)

insert into user_sdo_geom_metadata
select 'CUSTOMERS_VIEW', column_name, diminfo, srid
from user_sdo_geom_metadata where table_name='CUSTOMERS';

insert into user_sdo_themes values('MYCUSTOMERS',NULL,'CUSTOMERS_VIEW','LOCATION',
'











');

4.6 Также необходимо добавить новый безопасный источник данных. Делается это в файле
$OC4J_HOME\j2ee\home\applications\mapviewer\web\WEB-INF\conf\mapViewerConfig.xml. После изменения необходимо перегрузить OC4J.
Источник данных должен выглядеть примерное вот так



4.7 Возьмем теперь один из примеров Oracle Maps приложения (пусть будет $OC4J_HOME\j2ee\home\applications\mapviewer\web\fsmc\tutorial\samples\themeBasedFOIVisible.html). Переименуем в themeBasedFOIVisibleSec.html. Отредактируем строчку

var themebasedfoi2 = new MVThemeBasedFOI('themebasedfoi2','mvdemo.customers');

чтобы было вот так

var themebasedfoi2 = new MVThemeBasedFOI('themebasedfoi2','mvdemo_sec.mycustomers');

4.8 Теперь необходимо прописать, что при доступе к этой странице должна осуществляться аутенфикация пользователя. Делается это в файле
$OC4J_HOME\j2ee\home\applications\mapviewer\web\WEB-INF\web.xml

Добавляем сразу за

Secure mapping demo page
MapViewer secure map rendering demo
/demo/secure-mapping.html

наш страницу

Secure mapping demo page
MapViewer secure map rendering demo
/fsmc/tutorial/samples/themeBasedFOIVisibleSec.html


4.9 Перезапускаем OC4J и заходим по адресу
http://server:8888/mapviewer/fsmc/tutorial/samples/themeBasedFOIVisibleSec.html

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

Читать далее...

вторник, 24 июня 2008 г.

Работа с Georaster

1. Инсталляция
Начиная с Oracle Database 10g в базе данных появилась новая возможность по хранению географически привязанных растровых данных, таких как спутниковые снимки. К сожалению, с самого начала Oracle не предложил инструментария для работы с растровыми данными, полагаясь на партнеров. В 11-ой версии все стало лучше. Давайте посмотрим как можно загружаться данные.
1. После инсталляции примеров, в папке $ORACLE_HOME\md\demo\georaster\java есть загрузчик в базу данных.
2. Есть загрузчик от сторонних разработчиков - http://www.pcigeomatics.com/download_georaster_loader.php. Его можно проинсталлировать и получить ключик для использования. Объявлено, что он бесплатный.
К сожалению ни тот ни другой не автоматизурют процедуру заполнения метаданных для георастра. Для этого необходимо скачать инструмент http://dl.maptools.org/dl/geotiff/libgeotiff/.

2. Загрузка
Сначала необходимо создать 2 таблицы: таблицу с полем SDO_GEORASTER и таблицы, где непосредственно будут храниться метаданные.
Кроме это необходимо создать DML триггеры.
You should create the necessary DML trigger or triggers immediately after you create a GeoRaster table, and you must create the trigger or triggers before you perform any operations on the table.

Each time you call the SDO_GEOR_UTL.createDMLTrigger procedure successfully, GeoRaster creates a trigger with a unique name. (All GeoRaster DML trigger names start with the string GRDMLTR_.) When you drop a GeoRaster table, all GeoRaster triggers associated with the table are automatically dropped also.

If you have created the GeoRaster DML trigger on a column, GeoRaster automatically performs the following actions when the trigger is fired as a result of a DML operation affecting that column:

  • After an insert operation, the trigger inserts a row with the GeoRaster table name, GeoRaster column name, raster data table name, and rasterID value into the USER_SDO_GEOR_SYSDATA view (described in Section 2.4). If an identical entry already exists, an exception is raised.

  • After an update operation, if the new GeoRaster object is null or empty, the trigger deletes the old GeoRaster object. If there is no entry in the USER_SDO_GEOR_SYSDATA view for the old GeoRaster object (that is, if the old GeoRaster object is null), the trigger inserts a row into that view for the new GeoRaster object. If there is an entry in the USER_SDO_GEOR_SYSDATA view for the old GeoRaster object, the trigger updates the information to reflect the new GeoRaster object.

  • After a delete operation, the trigger deletes raster data blocks for the GeoRaster object in its raster data table, and it deletes the row in the USER_SDO_GEOR_SYSDATA view for the GeoRaster object.


create table city_data
(city_name varchar2(50),
population number,
georaster sdo_georaster);

call SDO_GEOR_UTL.createDMLTrigger('CITY_DATA', 'GEORASTER');

create table city_data_rdt_01
of sdo_raster (primary key (
rasterId,
pyramidLevel,
bandBlockNumber,
rowBlockNumber,
columnBlockNumber))
lob(rasterblock) store as (nocache nologging);

После этого можно создать пустые объекты, в которые будет осуществляться загрузка Georaster объектов (для PCI Geomatics это можно не делать).

-- Initialize a GeoRaster image with RASTERID=1
INSERT INTO city_data
values ('Boston', 625494,
sdo_geor.init('city_data_rdt_01', 1));

Имена таблицы RDT (где непосредственно хранятся данные георастра), судя по всем, должны быть уникальны в рамках все базы данных. Иначе получаем вот такую ошибку

ERROR at line 1:
ORA-13403: invalid rasterDataTable specification: GPS.MOSCOW_DATA_RD
ORA-06512: at "MDSYS.MD", line 1723
ORA-06512: at "MDSYS.MDERR", line 17
ORA-06512: at "MDSYS.SDO_GEOR_DEF", line 116
ORA-06512: at "MDSYS.SDO_GEOR_INT", line 2482
ORA-06512: at "MDSYS.SDO_GEOR_AUX", line 34
ORA-06512: at "GPS.GRDMLTR_73192_3", line 1
ORA-04088: error during execution of trigger 'GPS.GRDMLTR_73192_3'

3. Отображение в Map
После того как данные загружены - попробуем отобразить их в Mapviewer. Тут для России есть один очень существенный нюанс. Необходимо в запуск MapBuilder включить библиотеку orai18n.jar, иначе будет выдаваться вот такая ошибка (спасибо братьям китайцам http://hi.baidu.com/tiny_lk/blog/item/78e4510f5285bc2f6159f34e.html - им тоже тяжело с их иероглифами, как и нам с кириллицей)
Can not find a GeoRaster object with specified rdt and rid
Команда "правильного" запуска MapBuilder (библиотеку
orai18n.jar кладем в тот же каталог, где и MapBuilder и из него и запускаем):
java -cp orai18n.jar;mapbuilder.jar oracle.mapviewer.builder.MapBuilder

Здесь создаем Georaster theme. Процесс создания совершенно простой.
Создаем BASEMAP, с включенной темой Georaster.
Создаем MapTile на базе BASEMAP.
Кроме всего прочего для корректного показа нужно создать индекс на свойство spatialextent:
CREATE INDEX geor_idx ON moscow_data(georaster.spatialextent)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

Все. После этого базе TILECACHE можно создавать страничку в Mapviewer




Читать далее...