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

понедельник, 10 ноября 2008 г.

Компиляции GDAL с поддержкой Oracle Spatial

Библиотека Geospatial Data Abstraction Library(GDAL)  это библиотека для работы с растровыми географическими форматами файлов данных. GDAL распространяется Open Source Geospatial Foundation на условиях лицензии X/MIT, то есть является проектом с открытым исходным кодом. Как библиотека GDAL предоставляет вызывающему приложению единую обобщённую модель данных для всех поддерживаемых форматов файлов данных. Помимо этого в состав GDAL входит набор вспомогательных программ, вызываемых из командной строки, для преобразования и обработки данных. Описание выпуска GDAL/OGR 1.5.1 (март 2008) можно найти на странице новостей.

Начиная с версии 1.6 GDAL поддерживает не только векторный формат Oracle Spatial, но также и растровый, что делает ее еще более функциональной.

С точки зрения разработчика интересен сам API для работы с этой библиотекой. Для ГИС-специалиста и DBA может оказаться интересным ряд инструментов, поставляемых в этой библиотеке:

  • ogr2ogr – утилита для преобразования ГИС данных из одного формата в другой
  • gdaltransform – утилита для преобразования слоя в другую систему координат.

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

Format Name Code Creation Georeferencing Compiled by default
Arc/Info Binary Coverage AVCBin No Yes Yes
Arc/Info .E00 (ASCII) Coverage AVCE00 No Yes Yes
ESRI ArcSDE SDE No Yes No, needs ESRI SDE
ESRI Shapefile ESRI Shapefile Yes Yes Yes
FMEObjects Gateway FMEObjects Gateway No Yes No, needs FME
KML KML Yes No Yes (read support needs libexpat)
Mapinfo File MapInfo File Yes Yes Yes
Oracle Spatial OCI Yes Yes No, needs OCI library
X-Plane/Flighgear aeronautical data XPLANE No Yes Yes
и т.д.        

Т.е. можно видеть, что наряду из-за различных проприетарных драйверов Oracle Spatial не скопилирован по-умолчанию. Что самое смешное – библиотеку эту вы можете легко и просто скачать с сайта, не заплатив ни копейки!

Что ж, будем исправлять сию беду.

Для этого нам понадобится

Все это качаем и инсталлируем. GDAL распаковываем в папку C:\GDAL (чтобы в папке C:\GDAL были файлы makegdal71.sln, makegdal80.sln и т.д.). Открываем файл nmake.opt и редактируем переменную MSVC_VER (указываем нужную нам версию Visual Studio) и GDAL_HOME – указываем путь. В данном случае C:\GDAL.

После того как все это проделано – давайте скомпилируем GDAL в настройках по-умолчанию. Для этого:

  1. Запустим CMD
  2. Перейдем в каталог GDAL: cd C:\GDAL
  3. Настроим переменные среды для Visual Studio
    "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat”
  4. Настроим переменные среды для Microsoft Platform SDK
    "C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\SetEnv.Cmd”
  5. Запустите следующую команду set INCLUDE=%INCLUDE%;C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\atl;
  6. В файле "C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\atl\atlbase.h”  закомментируйте или удалите следующую строку #pragma comment(lib, "atlthunk.lib")
  7. Запустим компиляцию командой
    nmake /f makefile.vc
  8. Проинсталлируйте
    nmake /f makefile.vc install
  9. После инсталляции Вы должны получить рабочую версию GDAL. Можно проверить, запусти C:\gdal\bin\ogr2ogr.exe и получив на выходе
    image

Давайте теперь приступим к настроке для использования Oracle Spatial в GDAL. Для этого Вам необходимо будет проинсталлировать клиента Oracle, который можно взять по адресу http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10203vista.html. Инсталлируем клиента в вариант “Administrator”.

Для настройки компиляции плагина для Oracle Spatial – будем редактировать файл C:\GDAL\nmake.opt. Нужно найти следующие строки

# Add ORACLE support.
# Uncomment the following line to enable OCI Oracle Spatial support.
#ORACLE_HOME = C:/Software/Oracle/Product/10.1.0/db_1
# Uncomment the following if you prefer to build OCI support as a plugin.
#OCI_PLUGIN = YES

Указываем путь к клиенту базы данных и раскоментируем строки. Как-то во так должно получиться

# Add ORACLE support.
# Uncomment the following line to enable OCI Oracle Spatial support.
ORACLE_HOME = C:\oracle/product/10.2.0/client_1
# Uncomment the following if you prefer to build OCI support as a plugin.
# OCI_PLUGIN = YES
Перезапускаем компиляцию и инсталляции в том же окне (или заново прогоняем настройки, указанные выше). На самом деле с make clean – немного перестраховка, но все же:

  1. nmake /f makefile.vc clean
  2. nmake /f makefile.vc
  3. nmake /f makefile.vc install

После того, как все пройдет замечательно и make не ругнется – можно потестить функционал следующей командой:

c:\gdal\bin\ogr2ogr -f OCI OCI:mvdemo/mvdemopass@orcl c:\1\rusrays.shp

где mvdemo/mvdemopass – имя и пароль пользоваетля
orcl – alias базы данных
c:\1\rusrays.shp – путь к файлу с данными, лежащими в shape


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

вторник, 4 ноября 2008 г.

ZOOM-ZOOM :) Таскаем лупу по карте в Oracle Maps

Мой коллега LJ только что опубликовал на своем блоге классную новую фишку, разработанную его коллегой Ji Yang :))

Иногда бывает необходимо увеличить какой-нибудь участок карты. Можно, конечно, приблизить всю карту, но это долго и муторно. А вот взять лупу и увелить кусок карты – самое то. Вы можете скачать HTML страницу, реализующую этот эффект по адресу here. А здесь here можно взять иконку, используемую на странице. Демка работает на стандартных данных MVDEMO.

Код использует MVMapDecoration и другие стандартные функции из Oracle Maps JavaScript API. Основная идея состоит в том, чтобы создать пару: обработчик MVMapView и theme-based FOI слой для DIV контейнера, который обслуживает увеличивающее окно. Потом добавляем это окно как двигающийся Map Decoration объект на основную карту. Карта и тема в увеличительном окне показывает те же самые объекты, но на другом уровне увеличения, чем основная карта, что и производит эффекти увеличения.
Ниже показан пример того, что получается.

image


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

JVM crashes during OC4J work/SUN JVM падает во время работы OC4J

После инсталляции Oracle Mapviewer в среду Oracle BI 10.3.1.4 под нагрузкой начали возникать странные проблемы с вылетом виртуальной машины.

Симптомы примерно следующие:

#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# SIGSEGV (0xb) at pc=0xf5f270d8, pid=18678, tid=2892061616
#
# Java VM: Java HotSpot(TM) Server VM (1.5.0_05-b05 mixed mode)
# Problematic frame:
# V [libjvm.so+0x4310d8]
#


На сайта SUN былай найдена статья, в которой описывалась сия странная проблема. Вот ссылка на нее http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6405670. Если вкратце, то решение состоит в изменении параметров запуска виртуальной машины в запусковом файле OC4J. Нужно добавить параметр “-client”. После этого запусковый файл oc4j будет содержать две строки, начианющиеся вот так JVMARGS="-client -Djava.library.path=…………..”. После этого на голову сыпется мана небесная и все становится хорошо.


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

понедельник, 27 октября 2008 г.

Интеграция Oracle BI EE 10.1.3.4 и Mapviewer – пошаговая инструкция (версия 2)

В последнее время тема интеграции Oracle BI и Mapviewer стала очень популярная. К сожалению, на русском языке информации крайне мало. В этой статье я постараюсь закрыть эту проблему. За основу взята статья Venkatakrishnan J, Oracle BI EE 10.1.3.3 and Mapviewer - Step by Step integration, которую можно найти по адресу http://oraclebizint.wordpress.com/2007/09/25/oracle-bi-ee-10133-and-mapviewer-step-by-step-integration-phase1/.

В BI не встроены инструменты непосредственно для интеграции с Mapviewer, но среда Oracle BI является открытой и ее интеграция возможна с широким набором внешних инструментов. В частности интеграцию с Mapviewer достаточно просто и легко реализовать.

Процесс интеграции включает в себя 3 ключевых момента:

1. Понимание как передавать параметры между Mapviewer и Dashboard Promt

2. Понимание того, как делать “погружение” в карту.

3. Понимание того, как влиять на отчет в BI EE по мере навигации по карте.

Я постараюсь документировать все эти шаги так, чтобы их легко было повторить на собственном компьютере. Прежде чем приступать – необходимо выполнить ряд предварительных требований:

1. Развернуть базу данных Oracle (либо 10.2, либо 11g) – качаем отсюда http://www.oracle.com/technology/software/products/database/index.html.

2. Развернуть Oracle BI EE – качаем отсюда http://www.oracle.com/technology/software/products/ias/htdocs/101320bi.html.

2. Развернуть Mapviewer в том же OC4J, в котором работает BI EE (пусть наш сервер называется biserver и OC4J развернут по адресу http://biserver:9704 - дальше я буду ссылаться на него именно так). Mapviewer качаем отсюда http://www.oracle.com/technology/software/products/ias/htdocs/101320bi.html.

3. Установить все демонстрации. Порядок инсталляции демонстрационных примеров можно найти по адресу http://biserver:9704/mapviewer/fsmc/tutorial/setup.html.   Необходимо полностью настроить mapviewer так, чтобы все демонстрации работали (необходимо создать пользователя mvdemo, залить дамп данных, идущий в поставке к Mapviewer. Пользователь mvdemo будет содержать все пространственные данные, необходимы для дальнейшей шагов). В результате минимум должен работать вот этот пример http://biserver:9704/mapviewer/fsmc/tutorial/samples/DynarrayThemeBasedFOI.html.

Желательно иметь небольшой опыт использования javascript.

ЭТАП 1. Oracle BI управляет картой в Mapviewer.

Идея интеграции состоит в создании dashboard prompt, который будет содержать все города. На основе выбранного нами города мы должны получать карту, показывающую всех заказчиков в этом городе.

0. Если Вы используете Oracle BI под Windows, то этот этап не требуется и можно переходить ко второму этапу. Если Вы используете Oracle BI под Linux, то на Linux нет BI Administration Tools. Нужно будет проинсталлировать их на чистую Windows машину. Проще всего это сделать с использованием VMWare. Итак, после инсталляции Oracle BI Administration Tools нужно создать соединение с сервером BI. Для этого

  • Идем в Control Panel (Панель управления) –> Administration Tools –> Data Sources (ODBC)
  • Открываем закладку System DNS
    image
  • Создаем новый источник.
  • Выбираем в качестве драйвера Oracle BI Server
  • Далее заполняем параметры для подключения к установленному серверу
    image
  • На второй странице вводим имя и пароль к серверу. По умолчанию Administrator/Administrator
     image
  • Завершаем созданием ODBC источника.

Созданный ODBC источник в дальнейшем позволит нам подключаться и администрировать Oracle BI удаленно.

Запускаем BI Administration Tool Start->All Programs->Oracle Business Intelligence->Administration. Говорим, что хотим подключиться online. Выбираем ранее созданный ODBC источник и вводим имя и пароль.

Должны получить что-то вроде этого

image

1. Первым делом импортируем таблицу customers (без столбца location) в OBI EE Administration Console. Также необходимо проделать соответствующим мапинг в BM и Физическом слое. Все работы для простоты будем выполнять в Sample рабочем пространстве. Для этого:

  • Идем в меню File->Import-> From Database…
  • Выбираем в списке OCI 10g/11g (предварительно должен быть проинсталлирован клиент и настроен локальный алиас ORCL)
  • Указываем TNS Name: orcl, а в имени и пароле пользователя – mvdemo (пользователь создан при инсталляции mapviewer).
  • В списке таблиц выбираем схему MVDEMO, таблицу CUSTOMERS (все поля, кроме LOCATION) и STATES (все поля, кроме GEOM). Жмем OK.

Должно получиться что-то вроде этого

image

Давайте создадим первичные ключи на таблицы CUSTOMERS и STATES. В таблице CUSTOMERS это составной ключ CITY, COUNTY, NAME, STATE, а таблице STATES это один столбец STATE_ABRV. Чтобы назначить ключ :

  • Заходим в свойства таблицы CUSTOMERS
  • Переходим на закладку Keys
  • Выбираем существующий первичный ключ и жмем Edit
  • Переименовываем его в CUSTOMERS_PK (для красоты) и добавляем столбцы CITY, COUNTY, NAME, STATE (все кроме SALES).

Аналогично для STATES.

Кроме того сделаем связь по внешнему ключу.

  • Заходим в свойства таблицы CUSTOMERS
  • Переходим на закладку Keys
  • На закладке Foreign Keys задаем внешний ключ для поля STATE - на таблицу STATES (столбец STATE_ABRV)

image

Перетаскиваем схему MVDEMO в Bussiness Model and Mapping, затем перетаскиваем MVDEMO из Bussiness Model and Mapping в Presentation.

Выполним Check-In

image

Соглашаемся проверить консистентность модели.В результате получаем сообщение, что модель консистентна. Соглашаемся, что хотим открыть модель для запросов.

image

Закрываем окно Consistency Check Manager.

image 

Сохраняем модель.

2. Теперь необходимо создать prompt. Для этого

  • Мы заходим в Oracle BI по адресу http://biserver:9704/analytics
  • Выбираем Answers
  • Выбираем создать новый Dashboard Prompt

image

  • Выбираем таблицу CUSTOMERS
  • Столбец CITY
  • Указываем, что при выборе города должна устанавливать Presentation Variable с именем Region и сохраняем prompt.

image

3. Теперь поработаем с Mapviewer. Для этого перейдем на демонстрационную страницу http://biserver/mapviewer/fsmc/tutorial/demos.html и откроем демонстрационную карту с именем “Array Parameter and Templated Theme Based FOI”.

image

Эта карта выглядит примерно так

image

Мы будем опираться на эту карту. Эта карта при вводе имени города отображает все заказчиков, расположенных в районе этого города.
Например вот так

image

Давайте посмотрим на исходных код этой страницы. Выкинем лишнее и переделаем так, чтобы название города передавалось через URL

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Map Cache Server/Map Client</TITLE>
<link rel="stylesheet" type="text/css" href="../t.css" />
<script language="Javascript" src="/mapviewer/fsmc/jslib/oraclemaps.js"></script>
<script language=javascript>
  var mapview;
  function showMap()
  {
    var baseURL  = "
http://"+document.location.host+"/mapviewer";
    var mapCenterLon = -122.45;
    var mapCenterLat =  37.6706;
    var mapZoom      =  4; 
    var mpoint = MVSdoGeometry.createPoint(mapCenterLon,mapCenterLat,8307);
    mapview = new MVMapView(document.getElementById("map"), baseURL);
    mapview.addMapTileLayer(new MVMapTileLayer("mvdemo.demo_map"));
    mapview.setCenter(mpoint);
    mapview.setZoomLevel(mapZoom);
    mapview.display();
    var Region=getURLParameter("Region");
    Region=Region.toUpperCase();
    var parameters="\""+Region+"\"";
    var marrayPara=new ArrayParameter(parameters,'sarray','city_list');
    var themebasedfoi=mapview.getThemeBasedFOI("themebasedfoi1");
    if (themebasedfoi==null)
    {
      themebasedfoi = new MVThemeBasedFOI('themebasedfoi1','mvdemo.customer_by_cities');
      themebasedfoi.setQueryParameters(marrayPara);     
      themebasedfoi.setBringToTopOnMouseOver(true);
      mapview.addThemeBasedFOI(themebasedfoi);
    }
    else
    {
      themebasedfoi.setQueryParameters(marrayPara);     
      themebasedfoi.setBringToTopOnMouseOver(true);
      themebasedfoi.refresh() ;
    }
  }
  function getURLParameter(ParamName) {
    var strURLParamReturn="";
    var strHref=window.location.href;
    if (strHref.indexOf("?")>-1){
        var strQueryString=strHref.substr(strHref.indexOf("?")).toLowerCase();
        var aQueryString=strQueryString.split("&");
        for (var iParam=0;iParam<aQueryString.length;iParam++){
            if (aQueryString[iParam].indexOf(ParamName.toLowerCase()+"=")>-1){
                var aParam=aQueryString[iParam].split("=");
                strURLParamReturn=aParam[1];
                break;
            }
        }
    }
    return unescape(strURLParamReturn);
  }
</script>
</head>
<body onload= javascript:showMap()>
<h3>Oracle Maps example - ARRAY type binding variable &amp; templated theme based FOI </h3>
<div id="map" style="position:absolute;left:10px; top:50px; width:65%; height:70%"></div>
</body>
</html>

Результат будет выглядеть следующим образом

image

4. Теперь опять переходим в Oracle BI.

Для отображения карты мы будем использовать narrative view report и тэг IFRAME. В стобцы перекидываем CITY

image

Переходим на закладку Results. Выбираем отчет типа Narrative

image

и указываем откуда брать фрэйм. Задаем для него ширину и высоту, подходящую для Ваших задач. Сохраняем.

image

5. Теперь необходимо создать Dashboard, на который перекинуть наш Prompt и отчет. Выбирая в Prompt соответствующий город – мы видим на карте всех клиентов в данном городе.

Итак мы увидели как интегрировать OBI EE и Mapviewer. Точнее на первом этапе интеграция была односторонней – от OBI к Mapviewer. Мы научились передавать параметры из OBI в Mapviewer.

Теперь давайте перейдем ко второй фазе, в которой мы посмотрим как управлять средой OBI из Mapviewer.

Фаза 2 в основном сосредоточена на том, что в Mapviewer Мы можем иметь несколько так называемых basemaps и, кликая на каком-то foi регионе, мы можем переходить к другой базовой карте для имитация “погружение” в данные. Мы будем использовать тот же пример, что использовали и в первой части. Но нашей целью будет показать как передавать данные из mapviewer в OBI EE – к примеру мы будем показывать заказчиков в 2-х города, например OAKLAND и HAYWARD. Идея состоит в том, чтобы показать продажи в городе, при клике на любом клиенте в этом городе. К примеру – если мы кликаем на любом заказчике в OAKLAND – OBI EE показывает нам отчет обо всех продажах в OAKLAND. То же самое для HAYWARD.

6. Давайте создадим отчет в BI EE, которых будет показывать продажи во всех городах. Создадим фильтер по городу, вводимому через подсказку (prompt).

image

image

7. Как только это сделано – необходимо создать еще один narrative отчет, который будет вызывать вышеописанный отчет с использованием iframes. Убедитесь, что iframe имеет имя и проверьте GO URL параметр для отчета созданного перед этим (для этого нужно перейти на вкладку Advanced – одна из ссылок и будет нужной). URL должен выглять примерно так

http://10.172.189.44:9704/analytics/saw.dll?Go&Path=/users/administrator/SalesByCity&Options=rmf&Action=Navigate&P0=1&P1=eq&P2=CUSTOMERS.CITY&P3=OAKLAND

Здесь P0 – номер столбца, по которому фильтруем, P1 – оператор фильтрации, P2 – имя таблицы и столба фильтрации, P3 – значение фильтра.

Указанную строку мы и поместим в качестве IFRAME в narrative отчет

image

8. Следующий шаг – создать карту, которая изначально будет отображать всех клиентов в 2-х городах OAKLAND and HAYWARD. Мы будем использовать карту, созданную ранее, но слегка модифицируем для наших потребностей. Красным цветом выделены измененные места.

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Map Cache Server/Map Client</TITLE>
<link rel="stylesheet" type="text/css" href="../t.css" />
<script language="Javascript" src="/mapviewer/fsmc/jslib/oraclemaps.js"></script>

<script language=javascript>
  var mapview; 

  function showMap()
  {
    var baseURL  = "
http://"+document.location.host+"/mapviewer";
    var mapCenterLon = -122.45;
    var mapCenterLat =  37.6706;
    var mapZoom      =  4; 
    var mpoint = MVSdoGeometry.createPoint(mapCenterLon,mapCenterLat,8307);
    mapview = new MVMapView(document.getElementById("map"), baseURL);
    mapview.addMapTileLayer(new MVMapTileLayer("mvdemo.demo_map"));
    mapview.setCenter(mpoint);
    mapview.setZoomLevel(mapZoom);
    mapview.display();

    var Region=getURLParameter("Region");
    Region=Region.toUpperCase();
//    var parameters="\""+Region+"\"";
    var parameters = "\"" + "OAKLAND" + "\"," + "\"" + "HAYWARD" + "\"";
    var marrayPara=new ArrayParameter(parameters,'sarray','city_list');

    var themebasedfoi=mapview.getThemeBasedFOI("themebasedfoi1");
    if (themebasedfoi==null)
    {
      themebasedfoi = new MVThemeBasedFOI('themebasedfoi1','mvdemo.customer_by_cities');
      themebasedfoi.setQueryParameters(marrayPara);     
      themebasedfoi.setBringToTopOnMouseOver(true);
      mapview.addThemeBasedFOI(themebasedfoi);
    }
    else
    {
      themebasedfoi.setQueryParameters(marrayPara);     
      themebasedfoi.setBringToTopOnMouseOver(true);
      themebasedfoi.refresh();
    }
    var themebasedfoi=mapview.getThemeBasedFOI("themebasedfoi1");
    themebasedfoi.addEventListener("mouse_click", foiClick);   
   themebasedfoi.setBoundingTheme(true,true);
  }

 

function getURLParameter(ParamName) {
    var strURLParamReturn="";
    var strHref=window.location.href;
    if (strHref.indexOf("?")>-1){
        var strQueryString=strHref.substr(strHref.indexOf("?")).toLowerCase();
        var aQueryString=strQueryString.split("&");
        for (var iParam=0;iParam<aQueryString.length;iParam++){
            if (aQueryString[iParam].indexOf(ParamName.toLowerCase()+"=")>-1){
                var aParam=aQueryString[iParam].split("=");
                strURLParamReturn=aParam[1];
                break;
            }
        }
    }
    return unescape(strURLParamReturn);
  }

function foiClick(point, foi)
{
var drillURL =
"
http://10.172.189.44:9704/analytics/saw.dll?Go&NQUser=Administrator&NQPassword=Administrator&Path=/users/administrator/SalesByCity&Options=rmf&Action=Navigate&P0=1&P1=eq&P2=CUSTOMERS.CITY&P3="+foi.attrs[1];
objWin = window.open(drillURL, "biee","height=480,width=240,scrollbars=yes,resizeable=yes");
}

</script>

</head>

<body onload= javascript:showMap()>
<div id="map" style="position:absolute;left:0px; top:0px; width:99%; height:99%"></div>
</body>
</html>

В первом измененном параграфе мы указываем, что должны быть выбраны 2 города. Во втором параграфе мы указываем, что в “регионе” с именем “biee” должен быть открыт отчет, на который мы ссылаем с помощью URL – drillURL. Функция foiClick извлекает имя города для клиента, на которого мы кликнули и в передает имя этого города в ранее созданный отчет.

Результат должены быть примерно как на картинке ниже

image

После клика на заказчика мы должны получать следующую картину

image


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

среда, 22 октября 2008 г.

MapViewer for WebLogic kit updated

Последний релиз MapViewer версии 10.1.3.3 для WebLogic, был вчера выложен на сайте по адресу http://www.oracle.com/technology/software/products/mapviewer/index.html для скачивания.

Этот релиз запакован в файл с тем же именем (mapviewer10133wls.zip) компонента mapviewer.ear была обновлена, чтобы включить ряд последних исправлений. Если Вы испытываете проблемы с Oracle Maps при: быстром увеличении-уменьшении карты, при отображении FOI объектов или отображении map tiles, то скачайте и разверните последний дистрибутив.

И напоследок еще раз. Этот дистрибутив сертифицирован для WebLogic Servers, но вы также можете спокойно развертывать его на OC4J версий 10.1.3.* будь то standalone или Oracle App Server. Этот дистрибутив содержит все возможности MapViewer 11g previews по функциональности и стабильности.

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

понедельник, 20 октября 2008 г.

5 ноября в Москве состоится Oracle TechForum 2008

Oracle TechForum 2008 пройдет под лозунгом «Инновационная экспансия» и станет центральной ИТ-площадкой СНГ. Впервые в рамках форума будут организованы пять инновационных конференций по ключевым технологическим направлениям и продуктовым семействам корпорации: «SOA, распределенные вычисления и управление бизнес-процессами»; «Хранилища данных и системы бизнес-анализа»; «СУБД и опции»; «Системы и средства обеспечения информационной безопасности»; «Управление контентом: Enterprise 2.0 и Oracle Content Management».

Традиционно Oracle TechForum создает уникальную атмосферу и рабочую обстановку для передачи мирового опыта. Гости форума получат компетентные ответы Oracle Гуру и познакомятся с видением и концепцией корпорации, как построить оптимальную ИТ-инфраструктуру с учетом всего спектра технологий и комплексных решений Oracle, арсенал которых постоянно растет. Корпорация стремится предоставить обширный и многогранный комплекс передовых разработок для максимально полного удовлетворения ИТ-потребностей заказчиков из разных отраслей и сегментов. Совокупное время работы секций форума превысит 30 часов.

Участие в Oracle TechForum бесплатное. Регистрация по VIP-приглашениям. Предварительная регистрация обязательна и заканчивается 1 ноября 2008 г.

Одна из тем, рассматриваемых на форуме - Oracle Spatial и Oracle Mapviewer. Будет организован доклад и стенд.

Зарегистрироваться можно по адресу http://oracleclub.ru/techforum/index.html


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

Проверка корректности геометрии SDO_GEOM.VALIDATE_LAYER

Oracle Spatial позволяет контролировать корректность геометрий, сохраняемых в базу данных. Необходимость в таком контроле возникает при загрузке данных из внешних источников - например, shp-файлов. 
Контролировать можно до и после загрузки. 
1. Контроль данных после загрузки с помощью SDO_GEOM.VALIDATE_LAYER
Для контроля корректности Oracle Spatial требует наличия специальной таблицы. Создать таблицу можно следующим образом
CREATE TABLE val_results (mkt_id number, result varchar2(10));
После создания таблицы можно запускать проверку 
EXECUTE SDO_GEOM.VALIDATE_LAYER('COLA_MARKETS','SHAPE','MKT_ID','VAL_RESULTS');
Далее смотрим результаты проверки
SELECT * from val_results;
Если не выведено ни одной строки, то данные полностью корректны и их можно использовать для анализа, иначе необходимо интерпретировать результаты анализа. В этом нам поможет столбец result. В этом столбце будет номер ошибки Oracle. По номеру ошибки можно найти ее расшифровку в списке ошибок Oracle http://download.oracle.com/docs/cd/B28359_01/server.111/b28278/toc.htm
2. Контроль данных во время загрузки с помощью SDO_GEOM.VALIDATE_GEOMETRY.
Кроме проверки суже существующих данных можно организовать проверку данных "на лету". Делается это с помощью триггера следующим образом
declare
 l_valid_geom_result      varchar2(200);
 l_error_code             number;
BEGIN
 select SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(:new.shape,
     mdsys.SDO_DIM_ARRAY(mdsys.SDO_DIM_ELEMENT(NULL, -180, 180, .0005), 
                      mdsys.SDO_DIM_ELEMENT(NULL, -90, 90, .0005))) into l_valid_geom_result from dual;
 -- Examine the return value from this select and raise an exception if necessary.
 if l_valid_geom_result != 'TRUE' then
   select -1 * to_number(substr(l_valid_geom_result,1,instr(l_valid_geom_result,' '))) into l_error_code from dual;
   raise_application_error(-20000, 'Invalid geometry: ' || sqlerrm(l_error_code));
 end if;
END; 


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