logo

29 янв. 2013 г.

BIEE11g: Mapviewer + OpenStreetMap как WMS + HttpProxy

    Привет всем!
    Когда-то давно я описал решение по использованию в Oracle BI11g представлений-карт с подложкой от OpenStreetMap
    Сам до сих пор пользуюсь описанной методикой. Но что меня всегда смущало - на клиентских машинах необходим доступ в Интернет. Так как подложка от OSM отображается с помощью javascript, т.е. картинки со всем, что мы привыкли видеть на карте (административные границы; реки и озера; железные и автомобильные дороги; ландшафт...), подгружаются браузером пользователя.
    Это далеко не всегда удобно.
    Сегодня я хочу рассказать как решить эту проблему в OBIEE 11.1.1.6
На скриншоте ниже показан отчет с представлением-картой у пользователя без доступа в Интернет.



1. Создадим карту-подложку 

В режиме администрирования Mapviewer добавим новую карту-подложку с типом External


В свойствах подложки укажем:
  1. адрес WMS-ресурса (Web Map Service) - http://osm.wheregroup.com/cgi-bin/mapserv
  2. класс адаптера, отвечающего за получение "картинок" от WMS - mcsadapter.WMSAdapter
  3. путь до jar-файла с классом-адаптером - c:\Middleware\Oracle_BI1\bifoundation\jee\mapviewer.ear\web.war\WEB-INF\tileserver\mvadapter\mvadapter.jar
  4. свойства адаптера (параметры формируемого URL):
    • service       -   WMS
    • srs             -   EPSG:4326
    • format        -   image/png
    • map           -   /data/umn/osm/osm_basic.map
    • layers         -   OSM_Basic
  5. путь до каталога с кешем (полученными картинками-элементами пазла) - c:\Middleware\Oracle_BI1\bifoundation\jee\mapviewer.ear\web.war\tilecache\DWH19.OSM




    На этом можно было бы и закончить. WMS-сервис мы настроили - изображения с базовой подложкой от OpenStreetMap он уже сможет получать (складировать в папку-кеш).
Но только в том случае, если с машины-сервера BI возможен прямой доступ к Интернету.
    На практике же чаще всего используется корпоративный proxy-сервер.

2. Научим BI работать с PROXY

1. Внесем ряд изменений в файл c:\Middleware\user_projects\domains\bifoundation_domain\bin\setDomainEnv.cmd 
(у меня все сервера на Windows, если вы используете *nix, то править нужно setDomainEnv.sh)

Перед строками

set JAVA_OPTIONS=%JAVA_OPTIONS%

@REM SET THE CLASSPATH
добавьте следующие:
@REM Jack Carver start
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.net.proxyAuthenticatorClassName=ru.servplus.common.XxProxyAuthenticator
set PRE_CLASSPATH=%WL_HOME%\server\lib\servplus.jar;%PRE_CLASSPATH%

set JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyHost=HOST
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyPort=PORT
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyUser=USER
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyPassword=PASSWORD
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.noProxyHosts="localhost"
@REM Jack Carver end



Разумеется , замените под ваше окружение значения HOST, PORT, USER, PASSWORD.
Также рекомендую прописать в исключениях для прокси (http.noProxyHosts) доменные имена вашего сервера (/ов в случае кластера). Через разделитель |

2. Скопируйте jar-файл servplus.jar в каталог c:\Middleware\wlserver_10.3\server\lib
Внутри servplus.jar класс, предназначенный для аутентификации на прокси.
package ru.servplus.common;

import weblogic.common.ProxyAuthenticator;

public class XxProxyAuthenticator implements ProxyAuthenticator {

 public void init(String proxyHost, int proxyPort, String authType, String loginPrompt) {  
 }

 public String[] getLoginAndPassword() {
  String[] auth = new String[2];
  auth[0] = System.getProperty("http.proxyUser");
  auth[1] = System.getProperty("http.proxyPassword");
  return auth;
 }
}


3. Скорректируем XML определение подложки

    Чтобы безболезненно перейти от прошлой реализации карт к новой. Следует убедиться, что определения карт-подложек совпадают. А именно - равно ли общее количество и свойства каждого уровня детализации.
    Я рекомендую вам просто скопировать значения узлов zoom_levels из существующей рабочей карты и вставить в определение новой WMS-карты.



4. Определим новую карту в Oracle BI

Не забудьте добавить созданную карту-подложку в список доступных для Oracle BI. А также добавьте привязку геометрических слоев (вкладка Layers) к новой карте.
После всех действий вы можете смело править существующие отчеты с представлениями-картами, где в качестве карты теперь можете задать новую.


11 комментариев:

  1. Допустил неточность в сообщении.
    Для корректного отображения WMS-подложки в системе координат 3785 нужно вносить изменения в WMSAdapter-класс.
    Исправлю и опубликую в ближайшее время...

    ОтветитьУдалить
  2. Спасибо!
    А можно реальзовать подобное если доступа в интернет нет даже через прокси? Тоесть создать свою offline базу (конечно только по нужным районам).

    ОтветитьУдалить
  3. Интересный вопрос!
    Как варианты:
    - Использовать GeoRaster (http://www.oraclegis.com/blog/?p=4).
    - Настроить external-tile на сервере, где ЕСТЬ доступ в интернет, "прощелкать" всю интересующую вас карту (очевидно, нужно будет ограничить границы интересующей области карты и уменьшить кол-во уровней детализации); в итоге у вас будет в кеше mapviewer куча картинок под каждый прямоугольник внутри границ + на каждый уровень детализации (думаю, это то еще "веселье" будет...); затем настроить external-tile чтобы кеширование никогда не сбрасывалось и можно переносить на сервер БЕЗ интернета.
    - затянуть в БД все-все-все интересующие вас слои данных (административные границы, реки, моря, "точки интереса", автодороги, железные дороги т.д.) и отображать в mapviewer все эти слои на одной подложке (т.е. заменить "сводную" картинку внешнего WMS-сервиса на свой набор слоев); но это будет, конечно, тяжеловесное решение для пользовательских браузеров.

    Может быть, все-таки с интернетом?

    ОтветитьУдалить
  4. Спасибо за ответ!
    Интернет к сожелению использоваться не может (предпологается обрабатывать персональные данные).
    Поэтому вопрос отображения информации на карте в замкнутом контуре крайне актуален.

    Еще раз огромное Вам спасибо за выложенную информацию!

    ОтветитьУдалить
  5. Подскажите, пожалуйста!
    Делаю все в соответствии с вышеприведенным руководством, но вместо подложки отображается белый фон с надписью: «OpenStreetMap- Daten CC BY-SA Lizenz – provided by WhereGroup». Возможно, как Вы ранее писали, необходимо вносить какие-то изменения в WMSAdapter-класс?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      На этих выходных разберусь и обновлю эту публикацию.
      /* Спасибо за ваши замечания ;) */

      Удалить
    2. В первую очередь в очередной раз - Огромное Вас спасибо за материалы!
      Тоже столкнулся с проблеммой отображения на белом фоне надписи - " «OpenStreetMap- Daten CC BY-SA Lizenz – provided by WhereGroup». "
      Сообщение вываливается как для SRID 8307 так и 3785.
      Может уже нашли решение?

      Удалить
    3. Упс, если по карте поползать, то в определенных (x, y) можно найти карту.
      Вобщем нужно играться с max и min (x,y)

      Удалить
  6. Спасибо, будем ждать ответа!
    Хочу вот еще о чём спросить. Судя по всему, подложка не отображается только для системы координат 3785. Если её значение оставить по умолчанию 8307, то всё начинает отображаться. Но, к сожалению, данная подложка не охватывает Россию целиком и не столь информативна, как та, что может подтягиваться браузером в ранее описанном Вами способе. Есть ли возможность использовать эту подложку через BI?

    ОтветитьУдалить
  7. Поднять свой OSM сервер, например.

    ОтветитьУдалить
  8. Важное дополнение: нужно использовать параметр JVM с именем "http.nonProxyHosts" вместо "http.noProxyHosts" (пропущена буква n в non)

    ОтветитьУдалить