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

Показаны сообщения с ярлыком Mapviewer. Показать все сообщения
Показаны сообщения с ярлыком Mapviewer. Показать все сообщения

вторник, 7 апреля 2009 г.

Веб-семинар "Обработка пространственных данных (Oracle Spatial, Oracle MapViewer)"

8 апреля с 10.30 до 12.00 Oracle совместно с компанией RdTex проводит веб-семинар  на "Обработка пространственных данных (Oracle Spatial, Oracle MapViewer)". 

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

Для участия в веб-семинаре нужно зарегистрироваться.


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

пятница, 14 ноября 2008 г.

Семинар по Database Options. Spatial Included.

Как Вы знаете – Oracle Spatial это одна из опций базы данных Oracle. Т.е. Oracle Spatial – это составная часть базы данных, использующая все ее возможности и все остальные опции, функции и расширения, такие Oracle Real Application Cluster, Data Guard, Stream и т.д. Т.е. имеет смысл рассматривать ее не просто как отдельный компонент, а как составную часть большой и очень мощной машины.

Чтобы показать Вам все эти опции и их взаимодействие мы проводим семинар Database Options Details.

Следующий семинар будет проходить 4-5 декабря в Москве. В него будет включена секция по Oracle Spatial, Mapviewer, Семантическим сетям.

Более подробную информацию можно найти здесь DBOD v2.


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

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


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

понедельник, 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


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

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

Mapviewer 10.1.3.3 for Weblogic and OAS

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


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

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

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




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