oracle spatial что это

Oracle’s Spatial Database

Oracle’s spatial database is included in Oracle’s converged database, allowing developers and analysts to get started easily with location intelligence analytics and mapping services. It enables Geographic Information System (GIS) professionals to successfully deploy advanced geospatial applications. Organizations can manage different types of geospatial data, perform hundreds of spatial analytic operations, and use interactive map visualization tools with the spatial features in Oracle Autonomous Database and Oracle Database.

Oracle’s location and spatial platform delivers enterprise scalability, security, and performance to power the most demanding applications in Oracle Cloud Infrastructure and on-premises.

Helping fight COVID-19 in Finland using Oracle Cloud (9:29)

Easily load and create spatial data, and visualize it.

See how location intelligence data helps build smarter businesses.

Quickly download and get started with Spatial Studio to explore geospatial data.

Spatial database and geospatial technologies

Comprehensive spatial, mapping, and location analytics platform that addresses business-critical requirements across industries, including transportation, utilities, retail, energy, public sector, defense, construction, and more.

2D spatial data

Store and query 2D spatial geometries in Oracle Database, such as points of interest, streets, administrative boundaries. Perform queries based on proximity (how far is it?) and containment (is it inside a region?). Access hundreds of functions to filter data, measure distance relationships, and combine/transform geometries.

3D Point Cloud data and Light Detection and Ranging (LiDAR)

Manage spatial sensor data from laser scanning or photogrammetry, for use in enterprise 3D geographic information system (GIS) and Smart City applications. The 3D support is optimized for point cloud and CityGML workflows.

Raster data

Store and process geo-referenced raster data, such as orthophotos, satellite imagery, and gridded data for energy, natural resource management, or national security applications. Perform powerful raster analytics and on-the-fly image processing, with virtual mosaics and an easy-to-use loading tool supporting popular data formats.

Network data

Model road transportation, telco, utility, energy, and other networks and analyze this complex data for shortest path, nearest neighbor, within cost, and reachability.

Topology data

Manage topology data used by mapping and land management organizations with fine-grained feature editing and data integrity across maps and map layers for very large land parcel datasets with high consistency and accuracy.

Streaming point data

Track millions of moving objects against thousands of regions of interest, for logistics and IoT applications. Analyze locations of moving people for the purpose of contact tracing using a scalable, automatic API.

Источник

Oracle Data Integration, Cloud, Spatial and Analytics

Oracle Data Integration, Cloud, Spatial and Analytics (GoldenGate, ODI, Cloud, Spatial, Exadata)

Что такое Oracle Spatial и где он может быть полезен: хранение пространственных данных

Это первый пост в серии «Основы технологий».

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что этоЯ сам в свое время долго пытался понять, зачем нужен Oracle Spatial, долго искал, читал документацию. Сейчас по прошествии многих лет мне понятно, что нет какого-то простого и понятного документа. Есть вот такие проспекты, которые сразу начинают говорить о кораблях во вселенной. Есть также документация, которая все-таки скорее справочник, чем учебник. Одно хорошо — есть книга Pro Oracle Spatial for Oracle Database 11g. Она очень даже полезна. В этом посте я надеюсь сделать простое и понятно введение в пространственные технологии Oracle.

Основы Oracle Spatial

Oracle Spatial — это компонент базы данных, состоящий из типов данных, набора функций и процедур, а также внешних по отношению к базе данных веб-сервисов, которые позволяют эффективно хранить, быстро получать доступ и анализировать пространственные данные.

Преимущества хранения данных в Oracle Spatial

Для использования пространственных данных необходимо:

Дальше я опишу эти шаги.

Хранение векторных данных

Для хранения пространственных данных Oracle использует объектно-реляционную модель данных. За счет этого хранить и обрабатывать пространственные данные довольно просто.

Первый тип пространственных данных, который может хранить в Oracle Spatial — это векторные данные. Для векторных данных характерно наличие точных координат вершин объекта. К таким данным можно отнести:

Есть также более сложные (иногда многомерные) типы объектов:

Приведенные объекты могут быть как двумерные, так и трехмерными.

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

Для хранения векторных объектов используется тип данных SDO_GEOMETRY. Он является сложным (complex) объектным типом данных. Его структура приведена ниже:

Название поляТип данныхОписание
SDO_GTYPENUMBERОписывает тип геометрии (точка, полилиния, полигон) и количество измерений.
SDO_SRIDNUMBERСистему координат
SDO_POINTSDO_POINT_TYPEЕсли пространственный объект точка, то содержит координаты точки
SDO_ELEM_INFOSDO_ELEM_INFO_ARRAYОписывает то, как интерпретировать координаты в SDO_ORDINATES
SDO_ORDINATESSDO_ORDINATE_ARRAYСодержит координаты объекта в соответствие со способ описания, заданном в предыдущем поле

Поскольку SDO_GEOMETRY — это просто тип данных, то мы можем использовать его для создания таблицы. Допустим мы хотим хранить пространственные объекты вместе с их описанием и идентификатором. Тогда мы создадим вот такую таблицу:

CREATE TABLE t1 (
id NUMBER,
description VARCHAR2(50),
geom SDO_GEOMETRY
);

Примеры описания пространственных объектов

Вот пример точечного объекта:
oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

INSERT INTO cola_t1 (id, description, geom)
VALUES( 90, ‘point_only’,
SDO_GEOMETRY( 2001, NULL, SDO_POINT_TYPE(12, 14, NULL), NULL, NULL));

Вот пример полилинии:

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

INSERT INTO t1 (id, description, geom)
VALUES (
4,
‘Line string’,
sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,1),
sdo_ordinate_array (1,7, 11, 4, 12, 9, 6, 12))
);

Вот пример полигона:

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

INSERT INTO t1 (id, description, geom)
VALUES (
11,
‘Polygon’,
sdo_geometry (2003, null, null, sdo_elem_info_array (1,1003,1),
sdo_ordinate_array (1,7, 11, 4, 12, 9, 6, 12, 1,7))
);

Регистрация таблицы с пространственными данными

До тех пор пока таблица с пространственными данными не зарегистрирована — она не видна движку СУБД и приложениям пользователя. Для регистрации используется системное представление USER_SDO_GEOM_METADATA (или ALL_SDO_GEOM_METADATA):

SQL> desc user_sdo_geom_metadata
Name Null? Type
—————————————— ——— —————————-
TABLE_NAME NOT NULL VARCHAR2(32)
COLUMN_NAME NOT NULL VARCHAR2(1024)
DIMINFO MDSYS.SDO_DIM_ARRAY
SRID NUMBER

Пример заполнения представления с метаданными:

Пространственный индекс (R-Tree)

Для доступа к пространственным данным необходимо создавать R-Tree индекс. В отличие от обычных индексов пространственные индексы обязательны для корректной работы ПО. Создать пространственный индекс можно следующей командой:

CREATE INDEX t1_sidx ON t1(geom) INDEXTYPE is MDSYS.SPATIAL_INDEX;

Наличие индекса позволяет Oracle отвечать на пространственные запросы очень быстро, не выполняя дорогостоящий сплошной перебор.

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

Таким образом, если я захочу найти все объекты, соприкасающиеся с заданный прямоугольник X, то достаточно будет спуститься по иерархии дерева до узла d (получим кандидатов) и проверить условие для всех геометрий из узла d (получим результирующий набор).

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

Вот в упрощенном виде принцип работы R-Tree индекса. Более детальное и точное описание принципа работы пространственного индекса можно найти в документации.

Сопоставление терминов ГИС и терминов СУБД

Выше я все время говорил про таблицы, но это термины СУБД. В области ГИС используются другие термины. Ниже сопоставлении терминов:

Термин СУБДТермин ГИС
Строка в таблицеFeature, геометрический объект
ТаблицаFeature Class, Layer, Слой

*иногда таблица Oracle может содержать несколько слоев в двух различных столбцах. Так, например, строка, описывающая частный дом может содержать 2 столбца с геометрией — точечный (для меньшей детализации) и полигональный (для большей детализации).

Заключение

Подведу итог. Oracle Spatial — это де-факто стандарт хранения пространственных данных в корпоративном мире. Его понимают все основное ГИС ПО. Он также прост в понимании, дает возможность работы как из ГИС-систем, так и из отчетных систем с помощью SQL.

Только Oracle Spatial позволяет использовать все преимущества, заложенные в СУБД Oracle, такие как репликация, отказоустойчивость, длинные транзакции, online-операции с индексами и т.д.

В следующей статье я расскажу, как анализировать данные, хранящиеся в Oracle Spatial.

Источник

Что такое Oracle Spatial и где он может быть полезен: хранение пространственных данных

Александр Рындин,
Oracle СНГ

Источник: блог Alexander Ryndin, 26 Июнь 2012, http://www.oraclegis.com/blog/?p=2607

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

Это первый пост в серии «Основы технологий».

Я сам в свое время долго пытался понять, зачем нужен Oracle Spatial, долго искал, читал документацию. Сейчас по прошествии многих лет мне понятно, что нет какого-то простого и понятного документа. Есть вот такие проспекты, которые сразу начинают говорить о кораблях во вселенной. Есть также документация, которая все-таки скорее справочник, чем учебник. Одно хорошо — есть книга Pro Oracle Spatial for Oracle Database 11g. Она очень даже полезна. В этом посте я надеюсь сделать простое и понятно введение в пространственные технологии Oracle.

Основы Oracle Spatial

Oracle Spatial — это компонент базы данных, состоящий из типов данных, набора функций и процедур, а также внешних по отношению к базе данных веб-сервисов, которые позволяют эффективно хранить, быстро получать доступ и анализировать пространственные данные.

Преимущества хранения данных в Oracle Spatial

Для использования пространственных данных необходимо:

Дальше я опишу эти шаги.

Хранение векторных данных

Для хранения пространственных данных Oracle использует объектно-реляционную модель данных. За счет этого хранить и обрабатывать пространственные данные довольно просто.

Первый тип пространственных данных, который может хранить в Oracle Spatial — это векторные данные. Для векторных данных характерно наличие точных координат вершин объекта. К таким данным можно отнести:

Есть также более сложные (иногда многомерные) типы объектов:

Приведенные объекты могут быть как двумерные, так и трехмерными.

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

Для хранения векторных объектов используется тип данных SDO_GEOMETRY. Он является сложным (complex) объектным типом данных. Его структура приведена ниже:

Название поляТип данныхОписание
SDO_GTYPENUMBERОписывает тип геометрии (точка, полилиния, полигон) и количество измерений.
SDO_SRIDNUMBERСистему координат
SDO_POINTSDO_POINT_TYPEЕсли пространственный объект точка, то содержит координаты точки
SDO_ELEM_INFOSDO_ELEM_INFO_ARRAYОписывает то, как интерпретировать координаты в SDO_ORDINATES
SDO_ORDINATESSDO_ORDINATE_ARRAYСодержит координаты объекта в соответствие со способ описания, заданном в предыдущем поле

Поскольку SDO_GEOMETRY — это просто тип данных, то мы можем использовать его для создания таблицы. Допустим мы хотим хранить пространственные объекты вместе с их описанием и идентификатором. Тогда мы создадим вот такую таблицу:

CREATE TABLE t1 (
id NUMBER,
description VARCHAR2(50),
geom SDO_GEOMETRY
);

Примеры описания пространственных объектов

Вот пример точечного объекта:

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

INSERT INTO cola_t1 (id, description, geom)
VALUES( 90, ‘point_only’,
SDO_GEOMETRY( 2001, NULL, SDO_POINT_TYPE(12, 14, NULL), NULL, NULL));

Вот пример полилинии:

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

INSERT INTO t1 (id, description, geom)
VALUES (
4,
‘Line string’,
sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,1),
sdo_ordinate_array (1,7, 11, 4, 12, 9, 6, 12))
);

Вот пример полигона:

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

INSERT INTO t1 (id, description, geom)
VALUES (
11,
‘Polygon’,
sdo_geometry (2003, null, null, sdo_elem_info_array (1,1003,1),
sdo_ordinate_array (1,7, 11, 4, 12, 9, 6, 12, 1,7))
);

Регистрация таблицы с пространственными данными

До тех пор пока таблица с пространственными данными не зарегистрирована — она не видна движку СУБД и приложениям пользователя. Для регистрации используется системное представление USER_SDO_GEOM_METADATA (или ALL_SDO_GEOM_METADATA):

Пример заполнения представления с метаданными:

Пространственный индекс (R-Tree)

Для доступа к пространственным данным необходимо создавать R-Tree индекс. В отличие от обычных индексов пространственные индексы обязательны для корректной работы ПО. Создать пространственный индекс можно следующей командой:

CREATE INDEX t1_sidx ON t1(geom) INDEXTYPE is MDSYS.SPATIAL_INDEX;

Наличие индекса позволяет Oracle отвечать на пространственные запросы очень быстро, не выполняя дорогостоящий сплошной перебор.

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

Таким образом, если я захочу найти все объекты, соприкасающиеся с заданным прямоугольником X, то достаточно будет спуститься по иерархии дерева до узла d (получим кандидатов) и проверить условие для всех геометрий из узла d (получим результирующий набор).

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

Вот в упрощенном виде принцип работы R-Tree индекса. Более детальное и точное описание принципа работы пространственного индекса можно найти в документации.

Сопоставление терминов ГИС и терминов СУБД

Выше я все время говорил про таблицы, но это термины СУБД. В области ГИС используются другие термины. Ниже сопоставлении терминов:

Термин СУБДТермин ГИС
Строка в таблицеFeature, геометрический объект
ТаблицаFeature Class, Layer, Слой

*иногда таблица Oracle может содержать несколько слоев в двух различных столбцах. Так, например, строка, описывающая частный дом может содержать 2 столбца с геометрией — точечный (для меньшей детализации) и полигональный (для большей детализации).

Заключение

Подведу итог. Oracle Spatial — это де-факто стандарт хранения пространственных данных в корпоративном мире. Его понимают все основное ГИС ПО. Он также прост в понимании, дает возможность работы как из ГИС-систем, так и из отчетных систем с помощью SQL.

Только Oracle Spatial позволяет использовать все преимущества, заложенные в СУБД Oracle, такие как репликация, отказоустойчивость, длинные транзакции, online-операции с индексами и т.д.

В следующей статье я расскажу, как анализировать данные, хранящиеся в Oracle Spatial.

Источник

Oracle Data Integration, Cloud, Spatial and Analytics

Oracle Data Integration, Cloud, Spatial and Analytics (GoldenGate, ODI, Cloud, Spatial, Exadata)

Что такое Oracle Spatial и где он может быть полезен: анализ и обработка данных

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что этоВ первой статье на тему Oracle Spatial я привел определение: «Oracle Spatial — это компонент базы данных, состоящий из типов данных, набора функций и процедур, а также внешних по отношению к базе данных веб-сервисов, которые позволяют эффективно хранить, быстро получать доступ и анализировать пространственные данные.» Теперь я подчеркну, что Oracle Spatial — это не только способ хранить данные, но также и способ их анализировать.

Задача анализа становится все более востребованной, чем дальше система ГИС уходит от начала проекта. Если на первом этапе актуальной является проблема накопления данных (импорт, векторизация), то на более поздних этапах встает вопрос о быстром анализе данных и эффективной их публикации на внутренний или внешний веб-портал.

Если посмотреть на задачи анализа данных, то я бы их подразделил на 2 типа:

Такое подразделение позволяет отказаться в некоторых задачах от ГИС-среды как избыточной. Представьте себе задачу:

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

Встроенные возможности Oracle Spatial для анализа данных

Oracle встроил пространственный анализ непосредственно в язык SQL. Это дает возможность программисту, знающему SQL выполнять пространственный анализ. Также это позволяет ГИС-системам, которым известно о существовании Oracle Spatial, передавать на сторону сервера часть обработки. Условно средства для анализа пространственных данных можно подразделить на следующие типы:

Операторы

Операторы позволяют выявить топологические взаимоотношения между объектами. Общий вид использования оператора следующий:

ОПЕРАТОР (geometry1, geometry2, [param]) = ‘TRUE’

Операторы обычно используются во фразе WHERE. Далее я приведу список и примеры использования операторов.

SDO_FILTER(geometry1, geometry2, [param]) = ‘TRUE’

Самый простой пример, который можно представить — это отрисовка всех объектов, которые попадают в заданный прямоугольник (возникает, когда пользователь в ГИС системе смотрит на карту с определенным приближением). Если ГИС-система не знает о существовании пространственной СУБД, то она вытаскивает все объекты на сторону клиента и там осуществляет отсев объектов, не попадающих в видимый пользователю прямоугольник. Если же ГИС-система знает об Oracle Spatial, то она сразу запросит у СУБД нужные объекты:

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_FILTER(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8))
) = ‘TRUE’;

Этим запросом мы просим Oracle вернуть все объекты в cola_market, которые попадают в прямоугольник с вершинами 4,6 и 8,8.

SDO_FILTER — это очень быстрый оператор, который использует только индекс для ответа на запрос пользователя. Однако, этот запрос может вернуть лишние объекты, которые нужно отсеивать либо на стороне клиентского приложения, либо другими операторами.

SDO_RELATE(geometry1, geometry2, [param]) = ‘TRUE’

Если нам нужен абсолютно точный ответ запрос и дополнительная гибкость, то мы используем SDO_RELATE:

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_RELATE(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8)),
‘mask=touch+coveredby’
) = ‘TRUE’;

Это оператор подобно SDO_FILTER осуществляет быстрое отсеивание с использованием индекса, а затем для объектов-кандидатов производит точную проверку на соответствие заданному критерию.

Нужно остановиться на параметре MASK, который набирается из комбинации следующих ключевых слов: TOUCH, OVERLAPBDYDISJOINT, OVERLAPBDYINTERSECT, EQUAL, INSIDE, COVEREDBY, CONTAINS, COVERS, ANYINTERACT, ON. Ниже на рисунке показано, что означают эти ключевые слова:

oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

Операторы, являющиеся сокращением для SDO_RELATE

Для SDO_RELATE есть также набор сокращений: SDO_ANYINTERACT, SDO_CONTAINS, SDO_COVEREDBY, SDO_COVERS, SDO_EQUAL, SDO_INSIDE, SDO_ON, SDO_OVERLAPBDYDISJOINT, SDO_OVERLAPBDYINTERSECT, SDO_OVERLAPS, SDO_TOUCH.

Ниже показан пример:

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_ANYINTERACT(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8))
) = ‘TRUE’;

В этом примере мы извлекаем все объекты из таблицы cola_market, которые хоть как-то взаимодействуют с прямоугольником с вершинами 4,6 и 8,8.

SDO_WITHIN_DISTANCE(geometry1, aGeom, params) = ‘TRUE’

Этот оператор позволяет найти все объекты, расстояние до которых не превышает заданного. Наиболее важным параметром будет distance. В следующем примере мы ищем все объекты в пределах заданного расстояния.

SELECT c.name FROM cola_markets c WHERE SDO_WITHIN_DISTANCE(c.shape,
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8)),
‘distance=10 unit=KM’) = ‘TRUE’;

В этом примере ищутся все объекты на расстоянии 10 км от нашего прямоугольника.

SDO_NN(geometry1, geometry2, param [, number]) = ‘TRUE’ и SDO_NN_DISTANCE(number);

С помощью SDO_NN мы ищет некоторое количество объектов ближайших к заданному, а с помощью SDO_NN_DISTANCE выводим в результатах запроса само расстояние. Важным параметром является SDO_NUM_RES, указывающий на кол-во искомых объектов.

SELECT c.mkt_id, c.name, SDO_NN_DISTANCE(1) dist
FROM cola_markets c
WHERE SDO_NN(c.shape, sdo_geometry(2001, NULL,
sdo_point_type(10,7,NULL), NULL, NULL),
‘sdo_num_res=2’, 1) = ‘TRUE’ ORDER BY dist;

В приведенном пример мы ищем с помощью функции SDO_NN два объекта (sdo_num_res=2) из cola_markets ближайших к точке с координатами 10,7 (sdo_point_type(10,7,NULL)). Мы также указали последним параметром в SDO_NN число 1. С помощью этого числа мы можем сослаться на расстояние до найденного объекта в функции SDO_NN_DISTANCE (1). Мы также выполняем сортировку по расстоянию.

SDO_JOIN(table_name1, column_name1, table_name2, column_name2, params, preserve_join_order, table1_partition, table2_partition) RETURN SDO_ROWIDSET;

В приведенных ранее примерах мы брали некий объект и тестировали этот объект на взаимодействие с множеством объектов из таблицы. Это довольно распространенный пример. Но бывают более сложные случаи.

Допустим, нам нужно найти на территории области все дома, расположенные в охраняемых лесных зонах. Входные данные это таблица с домами и таблица с лесами. Нужно пробежаться по всем домам и проверить их пересечение с лесами. Классическое решение с помощью Oracle так и будет делать — мы напишем программу на PL/SQL (или другом языке), которая будет перебирать объекты в одной таблице и для каждого из них запускать функцию SDO_RELATE.

Такой подход имеет право на жизнь, но если его заменить на SDO_JOIN, то скорость можно увеличить до 100 раз! Вот пример решения этой задачи с помощью SDO_JOIN:

SELECT /*+ ordered */ c.rowid1, c.rowid2
FROM TABLE(
SDO_JOIN(‘FORESTS’, ‘SHAPE’, ‘HOUSES’, ‘SHAPE’,
‘mask=ANYINTERACT’)) c
Единственное неудобство — это то, что результатом будут адреса (rowid) найденных объектов, но это терпимо на фоне огромной скорости работы такого запроса.

Функции

Пространственные функции Oracle Spatial объединены в пакет SDO_GEOM. Их можно подразделить на 4 типа:

Я не буду подробно останавливаться на каждой функции, а лишь приведу несколько примеров:

SDO_GEOM.WITHIN_DISTANCE

Проверка, что 2 объекта находятся на расстоянии не более 1 км:

SELECT
SDO_GEOM.WITHIN_DISTANCE(c_b.shape, 1, c_d.shape, 0.1, ‘unit=KM’ ) as WITHIN_DISTANCE
FROM cola_markets c_b, cola_markets c_d
WHERE c_b.name = ‘cola_b’ AND c_d.name = ‘cola_d’;

SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT и VALIDATE_GEOMETRY_WITH_CONTEXT

Это очень важная функция — она проверяет корректность геометрического объекта. Она нужна, когда нам приносят геоданные из сторонних систем. Такие данные зачастую содержат логически некорректные объекты. В этой статье не стоит заострять на них внимание, поэтому описание скрыто. Я расскажу об этой процедуре и функции в другом месте.

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

Функция SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT позволяет нам понять, какие проблемы есть в геоданных. Порядок ее применения следующий:

Первые 3 шага я опущу из примера, последние 2 выглядят вот так:

CREATE TABLE val_results (sdo_rowid ROWID, result varchar2(1000));
— (Next statement must be on one command line.)
CALL SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT(‘COLA_MARKETS’,’SHAPE’,’VAL_RESULTS’);

SQL> SELECT * from val_results;

SDO_ROWID
——————
RESULT
———————————————————————————
AAABXNAABAAAK+YAAC
13349 [Element ] [Ring ][Edge ][Edge ]

Мы видим в результатах работы:

SDO_GEOM.AREA

Расчет площади объектов:

SELECT name, SDO_GEOM.SDO_AREA(shape, 0.005) FROM cola_markets;

NAME SDO_GEOM.SDO_AREA(SHAPE,0.005)
——————————— ——————————
cola_a 24
cola_b 16.5
cola_c 5
cola_d 12.5663706

SDO_GEOM. SDO_UNION

Результатом работы этой функции будет новая геометрия, являющаяся объединением двух переданных объектов.
oracle spatial что это. Смотреть фото oracle spatial что это. Смотреть картинку oracle spatial что это. Картинка про oracle spatial что это. Фото oracle spatial что это

SELECT
SDO_GEOM.SDO_UNION(c_b.shape, c_d.shape, 0.1) as UNION
FROM cola_markets c_b, cola_markets c_d
WHERE c_b.name = ‘cola_b’ AND c_d.name = ‘cola_d’;

UNION
———————————————————————————
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5, 5, 5, 7, 1, 7, 1, 1, 5, 1, 5, 3, 6, 3, 6, 5, 5, 5))

Функции агрегации

Последнее на чем бы я хотел остановиться — это функции агрегации, которые создают новый объект на основе множества поступающих объектов. Эти функции можно сравнить с обычными функциями агрегации Oracle AVG, SUM и т.д.

Вот список этих функций: SDO_AGGR_CENTROID, SDO_AGGR_CONCAT_LINES, SDO_AGGR_CONVEXHULL, SDO_AGGR_LRS_CONCAT, SDO_AGGR_MBR, SDO_AGGR_SET_UNION, SDO_AGGR_UNION. Я опять таки не буду приводить пример по каждой из них. Приведу пример для SDO_AGGR_MBR.

Функция агрегации SDO_AGGR_MBR

SELECT SDO_AGGR_MBR(shape) FROM cola_markets;

SDO_AGGR_MBR(C.SHAPE)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SD
———————————————————————————
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(1, 1, 10, 11))

Заключение

Oracle Spatial предлагает обширный набор функций и операторов для анализа пространственных данных. Эти функции и операторы реализованы в ядре СУБД Oracle, используют пространственный индекс и могут эффективно распараллеливаться как на одном сервере, так и в кластере. Интеграция с языком SQL позволяет совмещать пространственный и атрибутивный анализ в одном операторе SELECR.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *