Начать работу со Spatial -- очень легко. Я потратил на это один день. Но это только "начать", модуль серьёзный, для серьёзных задач -- разбираться придётся глубоко.
Spatial -- пространственные данные (ГИС). Модуль позволяет работать с плоскими и трёхмерными объектами (точки, линии, многоугольники, поверхности и пр.) и выполнять над ними операции -- найти пересечения, найти ближайшие и пр.
Пространственные данные хранятся как тип MDSYS.SGO_GEOMETRY. База при этом не перестаёт быть реляционной
Для информации -- http://ru.wikipedia.org/wiki/Пространственная_база_данных
Я поясню на следующих примерах:
I. Пробуем под любым пользователем
Например, можем создать SPTEST
create user SPTEST identified by SPTEST default tablespace USERS;
grant connect, resource, create view, unlimited tablespace to SPTEST;
II. Выполняем скрипт
Скрипт здесь http://yaroslavbat.narod.ru/sql/spatial_test.sql
sqlplus SPTEST/SPTEST@ORTE_LOCALHOST @spatial_test
Создание таблиц завершено. Делаем отчёты:
III. Ищем ближайшие объекты к дому, офису, заказчику (по три ближайших объекта).
select * from SP_NEAREST_PLACES_V
Выборка отсортирована по типу стартовой точки, типу объекта и возрастанию расстояния в метрах
POINT_ TYP PLACE_NAME ADDRESS DISTANCE
------ -------- ----------------------- ----------------------- --------
1.Home Развлече Бутик "Конфаэль" на Про ул.Вавилова, д.66 стр.1 3364
Нескучный сад Ленинский проспект 4242
Пушкинская набережная Пушкинская наб. 4456
Ресторан Ресторан "Султан" Орджоникидзе ул., д.3 3032
Ресторан "Скай Лонж" Ленинский пр., д. 32а 3405
Кафе "Мята" Лужнецкий проезд, д. 1А 5537
2.Offi Развлече Фирменный магазин «Рот 2-й Новокузнецкий переу 895
Лужков мост м. Третьяковская напро 2076
Болотная площадь Болотная площадь 2224
Ресторан Ресторан "Семь пятниц" Воронцовская ул., 6 1117
Ресторан "Море времени" Б. Полянка., д. 51 А/9 1434
Ресторан "Балчуг" Балчуг ул., д. 1 2121
3.Cust Развлече Патриаршие пруды Патриаршие пруды 476
Московский зоопарк Б. Грузинская, 1 742
Салон приключений и под ул. Тверская, д.22а, ст 913
Ресторан Кафе "Воск" ул. Красина, д. 7, стр. 51
Ресторан "China Club" Красина ул., 21 181
Ресторан "Грандъ Алекса Тверская ул., д. 27/1 639
IV. Получаем список объектов внутри Садового кольца
select * from SP_PLACES_INSIDE_V
Исправьте в тексте запроса условие на = 'FALSE' и получим список ВНЕ Садового кольца
Spatial -- пространственные данные (ГИС). Модуль позволяет работать с плоскими и трёхмерными объектами (точки, линии, многоугольники, поверхности и пр.) и выполнять над ними операции -- найти пересечения, найти ближайшие и пр.
Пространственные данные хранятся как тип MDSYS.SGO_GEOMETRY. База при этом не перестаёт быть реляционной
Для информации -- http://ru.wikipedia.org/wiki/Пространственная_база_данных
- Найдем ближайшие рестораны, места развлечений, достопримечательности к трем точкам: дому, офису и заказчику. Координаты своих мест вы наберете сами -- или пользуйтесь моими дефолтными (для обзора модуля этого хватит).
- Найдем все объекты внутри Садового кольца (изменив условие, получим ВНЕ).
I. Пробуем под любым пользователем
Например, можем создать SPTEST
create user SPTEST identified by SPTEST default tablespace USERS;
grant connect, resource, create view, unlimited tablespace to SPTEST;
II. Выполняем скрипт
Скрипт здесь http://yaroslavbat.narod.ru/sql/spatial_test.sql
sqlplus SPTEST/SPTEST@ORTE_LOCALHOST @spatial_test
Создание таблиц завершено. Делаем отчёты:
III. Ищем ближайшие объекты к дому, офису, заказчику (по три ближайших объекта).
select * from SP_NEAREST_PLACES_V
Выборка отсортирована по типу стартовой точки, типу объекта и возрастанию расстояния в метрах
POINT_ TYP PLACE_NAME ADDRESS DISTANCE
------ -------- ----------------------- ----------------------- --------
1.Home Развлече Бутик "Конфаэль" на Про ул.Вавилова, д.66 стр.1 3364
Нескучный сад Ленинский проспект 4242
Пушкинская набережная Пушкинская наб. 4456
Ресторан Ресторан "Султан" Орджоникидзе ул., д.3 3032
Ресторан "Скай Лонж" Ленинский пр., д. 32а 3405
Кафе "Мята" Лужнецкий проезд, д. 1А 5537
2.Offi Развлече Фирменный магазин «Рот 2-й Новокузнецкий переу 895
Лужков мост м. Третьяковская напро 2076
Болотная площадь Болотная площадь 2224
Ресторан Ресторан "Семь пятниц" Воронцовская ул., 6 1117
Ресторан "Море времени" Б. Полянка., д. 51 А/9 1434
Ресторан "Балчуг" Балчуг ул., д. 1 2121
3.Cust Развлече Патриаршие пруды Патриаршие пруды 476
Московский зоопарк Б. Грузинская, 1 742
Салон приключений и под ул. Тверская, д.22а, ст 913
Ресторан Кафе "Воск" ул. Красина, д. 7, стр. 51
Ресторан "China Club" Красина ул., 21 181
Ресторан "Грандъ Алекса Тверская ул., д. 27/1 639
IV. Получаем список объектов внутри Садового кольца
select * from SP_PLACES_INSIDE_V
Обратите внимание, что в тексте этого VIEW есть лишний DECODE. Но без него не работает. Похоже баг.
where decode (<FUNCTION>, 'TRUE', 'TRUE', 'FALSE', 'FALSE') = 'TRUE'
Исправьте в тексте запроса условие на = 'FALSE' и получим список ВНЕ Садового кольца
to be continued...
Комментариев нет:
Отправить комментарий