УП_Задание2_Отчёт
.pdfРис. 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