Пошук геопросторових даних із застосуванням MapViewer

Карта відповідає за допомогою Oracle Application Server 1910 g


Вже протягом ряду років на Web-сайтах користувачі вводять адресу і отримують карту заданого району. Додавання карти до адреси розширює контекст заданого місця за рамки назви вулиці і номера будинку. Карти з бізнес-інформацією можуть підвищувати цінність даних про назви і номери, вони знаходять застосування при аналізі і плануванні, в інтерфейсах з користувачами для багатьох типів бізнес-додатків і при формуванні звітів.

У цій статті представлений MapViewer, компонент сервера додатків Oracle Application Server 1910 g, та додаток-приклад, що включає опис наборів даних, бази даних і встановлення Oracle Application Server Containers for J2EE (OC4J), які використовуються компонентом MapViewer для показу актуальної інформації, яка визначається місцем розташування.

Цей додаток-приклад – це чисте Web-додаток на HTML, яке показує на карті актуальну інформацію, яка визначається місцем розташування, пов'язану як з головним, так і з іншими (польовими) офісами компанії, як показано на рис.1. Кожен польовий офіс представлений градуйованим гуртком (graduated circle), чий колір і розміри визначаються списком офісів. Як тільки користувач переміщує курсор на гурток польового офісу, додаткове вікно показує обрані атрибути цього офісу. Можливі додаткові операції дозволяють отримати більш детальну інформацію про найближче польовому офісі, про будь- заданому місця розташування (такого, як адреса клієнта) на цій карті.

Малюнок 1: Додаток-приклад MapViewer

Огляд MapViewer

MapViewer – це компонент сервера додатків Oracle Application Server 10 g. Це "легкий" (lightweight), але потужний сервлет для візуалізації геопросторових (geospatial) даних, керованих компонентом Oracle Spatial. Він включає тематичну картографію ділових даних, пов'язаних географією.

Карта формується з набору тем (themes) або шарів (layers). Кожна тема – це запит, який містить стовпець просторових даних (spatial column) типу SDO_GEOMETRY та інші стовпці у списку SELECT, а також правило стилю, що визначає її подання. MapViewer отримує запит на карту і створює і формує її зображення (render) її образ із застосуванням стилів і правил стилю, що зберігаються в базі даних.

Ви можете встановити MapViewer на Oracle Application Server 1910 g або на автономному примірнику OC4J.

Архітектура програми, створеного із застосуванням MapViewer

Додаток, створений із застосуванням MapViewer, включає:


Цей Web-клієнт може використовувати або Java-бібліотеку MapViewer-клієнта, або бібліотеку JSP-тегів для спрощення процесу видачі запитів до карти з обробкою відповіді та управлінням взаємодії користувача із зображенням карти, а також для управління станом – таким як поточне положення центру карти і масштаб – між запитами. Цей процес показано в наступному додатку-прикладі.

Як встановити MapViewer

Найпростіший спосіб початку роботи з MapViewer – завантажити Quick Start kit for Oracle Application Server 1910 g 10.1.2 MapViewer з мережі Oracle Technology Network (OTN). Цей набір містить попередньо конфігурований автономний (standalone) OC4J з MapViewer.

Завантаження даних

У прикладі-додатку використовуються наступні теми MapViewer:


Визначення таких тем звичайно зберігаються в словнику бази даних у представленні кожного користувача – USER_SDO_THEMES. Ви можете також створити динамічні теми на основі уявлень, сконструйованих під час виконання, і отримувати результати таких запитів на карті. Цей процес показано в демопрімере jview.jsp, який є частиною MapViewer Quick Start kit.

Всі базові теми знаходяться наборі даних цього демопрімера (mvdemo.dmp), доступного на сайті MapViewer на OTN. Цей набір включає просторову інформацію про штати, графствах, дорогах і містах США.

Всі дані для використовуваного в цій статті програми-прикладу знаходяться в архіві MapViewer.zip. MapViewer.zip містить файл field_offices.dmp file – експорт таблиці FIELD_OFFICES з призначеної для користувача схеми MVDEMO. MapViewer.zip також містить файл oramap.zip, який включає вихідний код додатка, скрипти, бібліотеки і робочий простір (workspace) Oracle JDeveloper 10 g. Нарешті, MapViewer.zip включає файл формату readme.

Після того, як ви імпортували файли mvdemo.dmp і field_offices. Dmp, виконайте скрипт style_theme.sql для створення потрібних стилів і тем.

Як виконувати цю програму,

Відкрийте файл робочого простору oramap.jws, в Oracle JDeveloper (9.0.5 або старше), і перегляньте вихідний код. При локально працюючому сервісі MapViewer (або mapviewer.ear, розміщеним на автономному OC4J і завантаженим при старті), виконуйте JSP-файл main.jsp під проектом на ім'я Project. Ви повинні додати клієнтську Java-бібліотеку MapViewer – $ OC4J_HOME/j2ee/home/applications/mapviewer/web/WEB-INF/lib/mvclient.jar – В путь бібліотек вашого проекту.

Альтернативно, щоб виконати наше додаток-приклад без Oracle JDeveloper, скопіюйте всі з директорії oramap / Project / public_html в нову директорію там, де розміщений MapViewer (типу $ OC4J_HOME/j2ee/home/applications/mapviewer/web/oramap) і з працюючим сервісом MapViewer, направте ваш браузер за адресою http://localhost:8888/mapviewer/oramap/main.jsp.

Організація коду

Весь код програми-прикладу знаходиться у файлах директорії oramap / Project / public_html. Головні файли:


Оскільки метою програми-прикладу є ілюстрація використання API на стороні клієнта, то й логіка уявлення, і основний код додатки розміщені у файлі main.jsp. При розробці більш масштабних Web-додатків ви повинні використовувати більш просунуту середовище розробки, таку як Oracle Application Development Framework (ADF).

Файли toolbar.js і toolbar.html призначені для реалізації інструментальної панелі (toolbar) з її одночасно натискає (rollover) кнопками завдяки застосуванню стандартного коду класу JavaScript.

Файл infotip.js містить JavaScript-код для додаткового (info-tip) вікна, яке показує докладні атрибути польового офісу в той момент, коли курсор вашої миші знаходиться над ним. Цей код доповнює вбудовану в MapViewer підтримку для генерації карти як HTML-зображення для будь-якого зображення карти. HTML-зображення карти – це набір областей, що викликаються клацанням миші, визначених на зображенні, яке проглядається в браузері. Зображення карти, створене засобами MapViewer, не має HTML-зображення карти, пов'язаного з ним.

Директорія myicons містить всі іконки, які використовуються в цій інструментальної панелі, легенду карти і файл legend.xml містить запит до карти для легенди карти.

Зміст файлу main.jsp

Файл main.jsp містить найбільш важливий код в цьому додатку-прикладі. Основні секції коду файлу main.jsp такі (в порядку проходження):


Послідовність, потік цього коду характерна, як правило, для будь-якого Web-додатки на базі MapViewer. Такий додаток посилає запит до MapViewer і представляє результуючу карту. Кінцевий користувач виконує деякі дії з цією картою, і програма посилає нові запити до сервера MapViewer та представляє нову результуючу карту.

Повний текст файлу main.jsp знаходиться за цією адресою.

Установка середовища

Секція установки середовища файлу main.jsp імпортує потрібні класи і JavaScript. Нижче наведено імпорт класу, що міститься в mvclient.jar, який представляє that represents your client handle when you are working with MapViewer:

<%@ page import=
“oracle.lbs.mapclient.MapViewer” %>

Він посилає запити до карти і обробляє відповіді від сервера MapViewer server.

Нижченаведені пропозиції імпортують JavaScript, який реалізує інструментальну панель на стороні клієнта і info-tip механізми:

<script type=”text/javascript”
src=”toolbar.js”> </script>
<script type=”text/javascript”
src=”infotip.js”> </script>

Далі слід адаптована (customizable) функція customMapClicked ():

function customMapClicked(
action, x, y, w, h)
{
document.omv_mapform.map_action
.value = action;
document.omv_mapform.map_click_x
.value = x;
document.omv_mapform.map_click_y
.value = y;
document.omv_mapform.map_box_w
.value = w;
document.omv_mapform.map_box_h
.value = h;
document.omv_mapform.submit();
return false;
}

Вона гарантує, що новий запит буде виданий з правильними параметрами, коли користувач клацне де-небудь на карті (за винятком областей карти з HTML-зображенням). Обробники подій "клацання миші", визначені в toolbar.js, викликають цю функцію.

Клацання на області HTML-зображення цієї карти, наприклад, польовий офіс, призводить до виклику наступної функції на стороні клієнта:

function areaClicked(event, info)
{
alert(info);
}

Параметр info містить ключові атрибути польового офісу. Визначення теми FIELD OFFICE специфікує ці параметри. Адаптування функції areaClicked дозволяє реалізувати більш витончену обробку, таку як відкриття нового звіту або створення графіків про певний об'єкт карти.

Далі в секції установки середовища файлу main.jsp, ви розкажете два об'єкти типу DIV, названих tbar_rect і infotip_window в HTML-заголовку. Ви використовуєте tbar_rect для підтримки zooming до області в межах box і infotip_window для показу додаткового вікна.

Підготовка параметрів

У секції підготовки параметрів файлу main.jsp оголошуються змінні і присвоюються значення параметрів, використовуваних при конструюванні запитів до карти. Ключовий вхідний параметр, action (дія), пов'язаний з поточним дією з картою, вибраним користувачем. Його значення (pan, zoomin, zoomout, zoombox або id) відзначає дію, яке MapViewer повинен виконати.

Змінна mvurl специфікує розташування сервера MapViewer. Припустимо, що MapViewer розміщений на локальному автономному примірнику OC4J і, отже, використовуємо адресу http://localhost:8888/mapviewer/omserver.

Інші параметри в секції підготовки параметрів файлу main.jsp включають центральну точку карти (center point of the map) і розмір (size) (в десятих частках градусів по вертикалі карти). Якщо користувач раніше вже кликав по цій карті, розташування цієї позначки також береться з вхідного HTTP-запиту у відносній системі координат цього пристрою зображення. За цією інформацією ви запитуєте нову карту у MapViewer.

Візуалізація нової карти

Код в секції "rendering a new map" (рендеринг нової картки) файлу main.jsp формує запит до карти і посилає його до сервера MapViewer. Велика частина логіки, що має відношення до карти, а також ваші власні геопросторові запити виконуються тут через клієнтський Java API.

Щоб виконати рендеринг нової картки, ви спочатку берете два посилання до примірників клієнтів MapViewer з поточної користувача сесії. Як правило, тільки один такий клієнт потрібно, щоб посилати запити до карти і отримувати відповіді. Наше додаток-приклад, однак, використовує підтримку нового HTML-зображення карти, так що вам потрібен окремий MapViewer-клієнт, щоб послати дещо інший запит до карти.

Створення нових клієнтів MapViewer. Для нової сесії браузера або ви не можете отримати доступ до існуючого примірника клієнта MapViewer, якщо, наприклад, час сесії вичерпано, ви створюєте нові екземпляри цього клієнта із застосуванням коду лістингу 1.

Код лістингу 1: Створення екземплярів клієнта

if (mv == null // newSession)             // new session
{
mv = new MapViewer (mvURL); / / one for the main map request
session.setAttribute ("oramap", mv); / / keep client handle in the session

mv.setDataSourceName (dataSrc); / / specify the data source (database)
mv.setImageFormat (MapViewer.FORMAT_PNG_URL); / / PNG Image
mv.setMapTitle (title); / / set map title
// specify marker symbol denoting map center
mv.setDefaultStyleForCenter ("M.IMAGE89_BW", null, null, null);
mv.setAntiAliasing (true); / / make map look nicer
mv.setCenterAndSize (cx, cy, size); / / initial center & size
mv.setDeviceSize (new Dimension (width, height)); / / window size
/ / Specify themes to display. States, Cities, and field office locations
mv.addPredefinedTheme(“THEME_DEMO_STATES”);
mv.addPredefinedTheme(“THEME_DEMO_BIGCITIES”);
mv.addPredefinedTheme(“FIELD OFFICE”);

/ / Now create MapViewer instance for handling HTML image maps
clkmv = new MapViewer (mvURL); / / for "FIELD OFFICE CLK" theme.
clkmv.setDataSourceName(dataSrc); // same data source
clkmv.setCenterAndSize (cx, cy, size); / / and center and size
/ / But different image format. We use SVG to construct the image map
clkmv.setSVGFragmentType (MapViewer.SVG_LAYERS_WITH_LABELS);
clkmv.setSVGFragmentInDeviceCoord(true);

clkmv.setDeviceSize(new Dimension(width, height));
/ / Specify the theme. FIELD OFFICE CLK lists the attributes
// that show up in an info-tip
clkmv.addPredefinedTheme(“FIELD OFFICE CLK”);
session.setAttribute(“oramap_clk”, clkmv);

// submit the two map requests
mv.run();
clkmv.run();
}


Ці два примірники клієнта MapViewer (інакше звані handles або beans) – mv і clkmv. Перший, mv, служить головним клієнтом для конструювання і посилки регулярних запитів до карти, у той час як clkmv посилає запити до HTML-зображень карти.

Теми та стилі: Як відображаються польові офіси. Запити до карти клієнта mv включають три зумовлених теми. Ключова тема – це FIELD OFFICE, яка визначається в USER_SDO_THEMES:

SQL> select base_table,
geometry_column, styling_rules
from user_sdo_themes
where name=”FIELD OFFICE”;

Результат цього запиту:

FIELD_OFFICES
LOCATION
<?xml version=”1.0″ standalone=”yes”?>
<styling_rules>
<rule column=”HEADCOUNT”
order_by=”HEADCOUNT”
sort_order=”DESC”>
<features style=
“OFFICE_STYLE”> </features>
<label column=”NAME”
style=”T.STREET NAME”>
headcount – 250
</label>
</rule>
</styling_rules>

Так що FIELD_OFFICES – це базова таблиця для цієї теми і стовпець LOCATION містить дані про розташування кожного офісу.

Визначення STYLING_RULES специфікує, що стовпчики HEADCOUNT, NAME і LOCATION запитуються з FIELD_OFFICES. Вона також передбачає, що результат сортується в порядку зниження значення HEADCOUNT. Це важливо, тому що ви показуєте польові офіси, як кружки змінних розмірів, які визначаються значеннями HEADCOUNT. Якщо розташування двох офісів близькі один до одного, ви захочете, щоб MapViewer виконав рендеринг спочатку більшого гуртка, а потім поверх нього меншого.

Якийсь об'єкт має міткою тільки тоді, коли числове значення стовпця LABEL більше, ніж 0. Елемент <label> вище має умова "headcount – 250," так що MapViewer присвоює мітки, тільки якщо його head count більше ніж 250.

Єдине призначення клієнта clkmv – посилати запит до карти, що містить тему FIELD OFFICE CLK. Це дуже схоже на тему FIELD OFFICE, використовувану клієнтом mv, єдина відмінність у тому, що він сортує офіси в зростаючому порядку перерахування, так що великі області HTML-зображення карти, згенеровані для польових офісів, з'являються в списку областей після малих. Тема FIELD OFFICE CLK також має елемент <hidden_info>:

<styling_rules >
<hidden_info>
<field column=”NAME”
name=”Office” />
<field column=”HEADCOUNT”
name=”#Employee” />
<field column=”ADDRESS”
name=”Address” />
<field column=”CITY”
name=”City” />
<field column=”STATE”
name=”State” />
</hidden_info>

</rule>

MapViewer вибирає стовпці, запитані в елементі <hidden_info>, як частину запиту і включає їх у відповідь (результат) карти.

Клієнт mv просить сервер виконати рендеринг карти в PNG-файл, зберегти його на сервері-хості і повернути URL для файлу-зображення, який буде представлений в браузері. Клієнт clkmv, у свою чергу, використовує файловий формат Scalable Vector Graphics (SVG):

clkmv.setSVGFragmentType(
MapViewer.SVG_STYLED_LAYERS_WITH_LABELS) ;
clkmv.setSVGFragmentInDeviceCoord(true);

Ці два методи "говорять" MapViewer про створення SVG-карти за запитом та повернення SVG-документа, що містить дані картки в системі координат пристрою. Ці координати використовуються для генерації областей HTML-зображень карти.

Створивши обох клієнтів, ви викликаєте метод run (), який посилає запит серверу. Клієнти чекають відповіді і витягують потрібну інформацію, таку як URL згенерованого зображення карти, використовуючи методи доступу.

Тепер, коли ви знаєте, як специфицируются контент карти і формат, можна розглянути, як виконується рендеринг розташувань польових офісів. Правила стилю для двох польових офісів посилаються на стиль OFFICE_STYLE, який можна назвати просунутим, заснованим на участь пам'яті (bucket-based). OFFICE_STYLE містить набір ділянок (buckets), кожен з них відповідає діапазону значень, такому як 250 <headcount <500, зі примітив-стилем (primitive style), таким як червоний гурток (red circle). Для тим FIELD OFFICE кожне значення впорядкованості (head count) визначає його ділянку і стиль.

Обробка дій користувача (Processing user actions). Параметр action у файлі main.jsp містить інформацію про взаємодію з користувачем. Якщо значення параметра action – pan, zoomin, zoomout або zoombox, ви повторно видаєте запит до карти, викликаючи відповідні методи, такі як pan (), з новими параметрами центру і розмірів. Ви завжди викликаєте ці методи на обох клієнтів, так що карта з HTML-зображеннями, що згенерувала в clkmv, синхронізована з зображенням показуваної карти.

Обробка ID-функції (Processing the ID function). Дія ID ініціюється тоді, коли користувач клацає по кнопці ID на панелі інструментів і потім клацає де-небудь на карті. Фактично ця обробка відбувається на стороні сервера.

Лістинг 2 показує відповідний сегмент коду для обробки ID-дії.

Код лістингу 2: Обробка ID-дії

else if(“id”.equals(action))
{
String[] columns = new String[]{“NAME Nearest_Office”,
“City”, “State”,
"A.location.sdo_point.x X",
"A.location.sdo_point.y Y",
“Headcount”};

/ / Find out the office nearest to where user clicked on the map
officeInfo = mv.identify(dataSrc,
“field_offices a”, //the table name
columns, / / columns in SELECT clause
"Location", / / geometry column name
srid, / / spatial reference system id
mapClickX, mapClickY / / mouse click position
);
Point2D officeLoc = null;
if(officeInfo!=null)
{
/ / Identify () returns a String [] [] of row, column values
// row 0 is the column name list, row 1 on are values
// columns are named in the “columns” parameter
// so here column 0 is Name, 1 is City, 2 is State,
// 3 is X, and 4 is Y
String x = officeInfo[1][3];
String y = officeInfo[1][4];
officeLoc = new Point2D.Double (Double.parseDouble (x),
Double.parseDouble (y));
}

// mark user click on the map with a PIN marker
Point2D p2 = mv.getUserPoint(mapClickX, mapClickY);
mv.addPointFeature(p2.getX(), p2.getY(), srid,
“M.CYAN PIN”, //a PIN marker style
null, null, null);

//add a leader line from user click to nearest office
if(officeLoc!=null)
mv.addLinearFeature (new double [] {p2.getX (), p2.getY (),
officeLoc.getX (), officeLoc.getY ()},
srid, “NEAREST_LINE_STY”, null,
null, false);

/ * For identify: use previously generated map as backdrop
and avoid rerendering all base themes.
*/
if(mv.getBackgroundImageURL()==null)
mv.setBackgroundImageURL (mv.getGeneratedMapImageURL ());
String[] enabledThemes = mv.getEnabledThemes();
mv.setAllThemesEnabled (false); / / temporarily disable themes

mv.run(); // reissue map request to draw a PIN marker
// reenable all themes
mv.enableThemes(enabledThemes);

mv.removeAllPointFeatures(); // clean up PIN marker
mv.removeAllLinearFeatures (); / / clean up leader line as well
} // end id action


Код в лістингу 2 спочатку знаходить польовий офіс, найближчий до розташування, заданому користувачем, використовуючи метод identify (). Вхідні параметри – це ім'я цільової таблиці (FIELD_OFFICES), по якій буде проводитись пошук, список повертаються стовпців і розташування миші в системі координат екрана.

Далі, код визначає координати підстави, що відповідають розташуванню цього кліка миші:

Point2D p2 = mv.getUserPoint(
mapClickX, mapClickY);

Потім код додає символ маркера PIN до цього розташуванням:

mv.addPointFeature(
p2.getX(), p2.getY(), srid,
“M.CYAN PIN”, //a PIN marker style
null, null, null);

Далі, код додає лінію, що з'єднує ці два розташування з новою картою:

mv.addLinearFeature(
new double[]{p2.getX(), p2.getY(),
officeLoc.getX(), officeLoc.getY()},
srid, “NEAREST_LINE_STY”, null,
null, false);

Так як ви додаєте тільки PIN і лінійні об'єкти до нової карті, то марнотратно повторно генерувати все це господарство. Тому ви просто використовуєте попередню карту як фон, тимчасово дезактівіруя всі інші теми, і видаєте запит до карти таким чином:

if(mv.getBackgroundImageURL()==null)
mv.setBackgroundImageURL(
mv.getGeneratedMapImageURL());
String[] enabledThemes =
mv.getEnabledThemes();
mv.setAllThemesEnabled(false);
//temporarily disable themes
mv.run();
// reissue map request to
// draw PIN and line

Як тільки ви сгенеріруете нову карту, ви повторно активуєте теми і забираєте PIN і лінійні об'єкти:

 


mv.enableThemes(enabledThemes);
mv.removeAllPointFeatures();
// clean up the PIN marker
mv.removeAllLinearFeatures();
// clean up leader line as well

І тепер у вас є нова карта, отримаєте атрибути найближчого офісу, і вона готова до подання інформації.

Представлення результуючої сторінки

Секція подання результуючої сторінки файлу main.jsp містить прості HTML-теги. Інструментальна панель показана в лістингу 3.

Код лістингу 3: Представлення інструментальної панелі результуючої сторінки

<!– Left column : toolbar and map image –>
<TD width=”<%=width%>” bgcolor=”#d4d0c8″>
<%
/ / Pick up the correct icon file for the toolbar buttons
String [] toolbarNames = new String [] {"zoomin", "pan",
"Zoomout", "zoombox", "id"};
String [] toolbarImgs = new String [toolbarNames.length];
for(int i=0; i<toolbarImgs.length; i++)
{
if(toolbarNames[i].equals(action))
toolbarImgs[i] = “myicons/” + toolbarNames[i]
+ “_dn.png”;
else
toolbarImgs [i] = "myicons /" + toolbarNames [i] + ". png";
}
%>
<%@ include file=”toolbar.html” %>
</TD>

Пропозиція <% @ include file = "toolbar.html"%> визначає положення кнопок інструментальної панелі. Для кожної кнопки повинен бути обраний реальний файл-іконка, здатний відображати поточний статус кнопки (Тобто, клацнули по ній чи ні). JSP-код в лістингу 3 в циклі обробляє список імен кнопок і вибирає з директорії myicons потрібний файл для кнопкової іконки. Якщо по кнопці, такий як "pan," клацнули, ви використовуєте файл <button_name> _dn.png (в даному випадку pan_dn.png). Імена цих файлів зібрані у файлі toolbar.html file.

Представлення зображення згенерованої карти

Код лістингу 4 представляє зображення згенерованої карти.

Код лістингу 4: Представлення карти

<%
/ / Get the HTML AREA definition of selected theme "s Image Map.
String areas = clkmv.getThemeAsHTMLAreas(
“FIELD OFFICE CLK”, true) ;
%>
<MAP NAME=”omv_infomap”>
<%= areas==null?””:areas %>
</MAP>
<div id=”infotip_window”></div>
<div id=”display” style=”position:relative”>
<!- now for the actual map image –>
<Img id = "oramap" src ="<%= mv.getGeneratedMapImageURL ()%>"
class=borderall
usemap=”#omv_infomap”
onload = "changeActionButton ("<%= action %>")" />
</div>
<div id=”tbar_rect”></div>

Цей код – по суті HTML-тег <img> з src-зображенням, отриманим від mv за методом getGeneratedMapImageURL (). Він використовує HTML-зображення карти з назвою omv_infomap, контент якої повертається від методу call getThemeAsHTMLAreas () від clkmv і розміщується між тегом <MAP> і тегом <img>. Нарешті, тег <img> оточується різними елементами типу <DIV>, включаючи infotip_window і tbar_rect, для додаткового вікна і зміни масштабу (box-based zoom), відповідно.

Коли MapViewer представляє зображення карти, користувач може клацнути по навігаційних кнопок карти ("pan" або "zoom") або по карті для ідентифікації показаної особливості. Так як деяка інформація стану або значення параметрів повинні зберігатися між запитами, то HTML FORM містить поточні значення параметрів. Коли користувач клацає по карті, функція JavaScript використовує ці параметри для видачі нового запиту до карти.

Висновок

MapViewer дає розробникам Web-додатків просунуте засіб інтеграції та візуалізації карт з бізнес-даними. Він використовує можливості, включені в Oracle 10 g, для керування відображенням географічних даних і приховує від розробників додатків складність запитів до просторових даних та процесу візуалізації.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*