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

вторник, 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




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

понедельник, 2 июня 2008 г.

Oracle Spatial for GPS vehicle monitoring

Сегодня появилась потребность создать небольшую, но интересную презентацию по Oracle Spatial. Был выбрано создание софтинки для GPS мониторинга.

Начнем с заполнения данных.
Одна из проблем - отсутствие примеров для России. Сильно не вдаваясь в детали - берем данные из штатов от Navteq :)
Берем отсюда
http://www.oracle.com/technology/products/spatial/htdocs/spatial_partners_data.html и заливаем в базу:
  1. Распаковываем данные
  2. Из каталога с данными подключаемся к базе sqlplus system/password@orcl
  3. Создаем пользователя world_sample
    SQL> CREATE USER world_sample IDENTIFIED BY world_sample; User created. SQL> GRANT CONNECT, RESOURCE TO world_sample; Grant succeeded.
  4. Запускаем загрузку данных
    SQL> @load_sample_data.sql
    Enter value for directory_name: C:\distrib\spatial data\world_sample
    Enter value for user_name: world_sample
    Password:
    oracle (пароль пользователя system)
  5. Теперь можно посмотреть на эти данные. Для этого в поставке есть файлик worldmaps.jspx
    cd c:\oc4j\j2ee\home\applications\mapviewer\web\fsmc
    copy "C:\distrib\spatial data\world_sample\worldmaps.jspx" .
  6. Прописываем источник данных для world_sample
  7. Запускаем oc4j из каталога c:\oc4j\bin
    cd c:\oc4j\bin

    oc4j -start



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