Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

УП_Задание2_Отчёт

.pdf
Скачиваний:
1
Добавлен:
20.06.2023
Размер:
2.37 Mб
Скачать

Рис. 8. Настройка подписей.

Результат выполнения запроса представлен на рисунке 9:

Рис. 9. Отображение решения второй задачи в масштабе 1:312 500.

.

Необходимо было решить вторую задачу с применением пространственного индекса типа R-tree Index. Для этого был создан

11

пространственный индекс SpatialIndex для таблицы "Землепользование".

Процесс создания индекса показан на рисунке 10:

Рис. 10. Процесс создания пространственного индекса.

После этого была создана дополнительная таблица SqlResultFrame (рис.

11):

Рис. 11. Запрос по созданию таблицы SqlResultFrame.

Этот запрос выбирает только крупные озёра (озёра, подходящие по параметрам), строит минимальный прямоугольник, в который входит то или иное озеро, строит область, границы которой находятся на расстоянии 2 км от границ прямоугольника, и выдаёт результат в виде получившегося геометрического объекта.

12

После этого был сформирован сам запрос (2.2), решающий поставленную задачу (рис. 12):

Рис. 12. Итоговая версия запроса.

Большая часть запроса идентична запросу для решения предыдущей задачи. Рассмотрим изменённую часть.

В самом внутреннем запросе выбираются только те земельные участки,

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

самый внутренний подзапрос ограничивает область поиска.

Результат выполнения запроса представлен на рисунках 13 и 14 (на последнем добавлено отображение слоя SqlResultFrame):

13

Рис. 13. Отображение решения второй задачи в масштабе 1:312 500.

Рис. 14. Отображение решения вместе со слоем SqlResultFrame (масштаб 1:1 250 000)

Если сравнить результаты запросов (2.1) и (2.2), то можно убедиться, что количества объектов типа "Садоводческие товарищества" из результата запроса для решения второй задачи и из результата запроса для третьей задачи совпадают. Таким образом, можно сделать вывод, что применение пространственного индекса типа R-tree Index действительно ускоряет работу программы, не нарушая при этом точность результата (см. рис. 15 и 16).

14

Рис. 15. Результат запроса для второй задачи (всего 638 объектов).

Рис. 16. Результат запроса через R-Tree индекс (всего 638 объектов).

15

ОТВЕТЫ НА КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Пусть в таблице B хранятся геометрии точечных объектов (поле geometry),

в таблице А – геометрии линейных объектов (поле geometry).

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

select A.geometry from A, B

where st_intersects(buffer(transform(B, 2535), 2000), transform(A, 2535)) = 0

Что вернет результат выполнения данного запроса для конфигурации,

представленной на рисунке? Как исправить данный запрос, чтобы он вернул список линейных объектов A, удаленных от объектов B на расстояние не менее

2000 метров?

Ответ: запрос вернёт оба линейных объекта, так как функция st_intersects(…) вернёт 0 для объектов a1 и b2 и для пары a2 и b1, и условие st_intersects(…) = 0 выполнится. Это случится, потому что линейный объект a1

не пересекает область объекта b2 и a2 не пересекает область b1. Чтобы запрос работал корректно и возвращал список линейных объектов A, удалённых от объектов B на расстояние не менее 2 000 метров, необходимо добавить внешний надзапрос:

16

select A.geometry from A

where A.geometry not in

(

select A.geometry from A, B

where st_intersects(buffer(transform(B.geometry, 2535), 1999), transform(A.geometry, 2535)) = 1

)

В данном варианте запроса во вложенном запросе мы изменили значение

0 на 1, чтобы данный подзапрос выбирал все те объекты A, которые пересекают области вокруг точечных объектов B. Внешний же запрос оставит только те объекты A, которые НЕ входят в список, сформированный внутренним запросом,

то есть выведет все те объекты A, которые НЕ пересекают области объектов B,

то есть находятся на расстоянии не менее 2 000 метров. Но так как расстояние в

2 000 м нас устраивает, то границы области стоит выставить в 1 999 м.

17

ВЫВОДЫ

В ходе выполнения работы по средствам программы QGis были решены две задачи путём написания SQL-запросов и даны ответы на контрольные вопросы.

18

Соседние файлы в предмете Организационная практика