ООО «Политерм». Анализ пересечения объектов разных слоев (SQL)
Архивная публикация
SQL-запросы ZuluGIS позволяют не просто определить взаимодействуют объекты в пространстве или нет, но еще и посчитать степень взаимодействия, к примеру какая часть объекта (его площадь или длина) попадает в другой. В конструкциях таких запросов используется оператор Intersection
Для примера создадим 2 слоя, они сохранены в архив карты ZuluGIS (пример для скачивания доступен ниже, архивы карт доступны в ZuluGIS 2021) и на них рассмотрим работу оператора Intersection. В основном (Зеленый) слое нарисовано 3 зеленых квадрата площадью 900 кв.м., в дополнительном (Желтый) 4 желтых многоугольника площадью 200 кв.м.
Пример 1. Определим площадь желтых фигур, расположенных в зеленых квадратах.
Запрос будет содержать конструкцию GROUP BY и объект обработки геометрии Intersection.
SELECT
g.[name],
sum(g.Geometry.Intersection(y.Geometry).area())
FROM [Зеленый] as g, [Желтый]AS y
group by g.[name]
Пример 2. Запишем в базу данных основного слоя площадь желтых фигур, расположенных в соответствующих зеленых квадратах.
Для формирования вложенной таблицы площадей запрос так же будет содержать конструкции GROUP BY и объект обработки геометрии Intersection и конструкцию INNER JOIN (внутреннее соединение) для сопоставления результатов вложенного запроса с объектами основного слоя.
update g1 SET g1.[Площадь желтых]= t2.y_sum
from [Зеленый] as g1
INNER JOIN
select g2.sys,
sum(g2.Geometry.Intersection(y2.Geometry).area()) as y_sum
FROM [Зеленый] as g2, [Желтый]AS y2
group by g2.sys) as t2
on g1.sys = t2.sys