Страница 1 из 3
Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 30 сен 2014, 07:53
ginpetr
Хочу поделиться способом чёткой визуализации проблемных мест в ПЗиЗ или Генплане (пересечения ЗУ границей территориальной или функциональной зоны) имеющимися средствами Мапинфо. Давно думал и только сегодня осенило.
1. Имеем две таблицы: ЗУ (земельные участки) и ТЗ (территориальные зоны)
2. Таблица --> Обновить колонку...--> Обновить таблицу: ЗУ --> Обновить колонку: Добавить новую временную колонку --> Значения извлечь из: ТЗ -->Обединение: Объект из таблицы ТЗ содержит объект из таблицы ЗУ-->Вычислить: Значение-->Для: Выражение: Area(obj,"hectare")-->OK
2. Таблица --> Обновить колонку...--> Обновить таблицу: ЗУ --> Обновить колонку: Добавить новую временную колонку --> Значения извлечь из: ТЗ -->Обединение: Объект из таблицы ТЗ пересекает объект из таблицы ЗУ-->Вычислить: Proportion Avg-->Для: Выражение: Area(obj,"hectare")-->OK
' Если у земельного участка эти два полученных значения разные, то он пересекается границей ТЗ.
3. Карта-->Создать тематическую карту-->Отдельные значения-->Индивидуальные значения регионов-->Далее-->Таблица: ЗУ-->Поле:Выражение:Первая полученная временная колонка = Вторая полученная временная колонка --> Далее-->Назначаем цвета (я для пересекаемых участков назначил ярко красный цвет, для других без заливки и убрал галочку Заменить стиль слоя)-->OK
Проблемные участки выделяются цветом "динамически", при исправлении границы ТЗ заливка исчезает. Главное, что не показываются проблемными участки, граница которых частично совпадает с границей ТЗ (раньше не мог от этого избавиться).
Высшей математики тут нет, пишу, зная, как мало пользователей Мапинфо использует Выражения и Тематические карты в работе.
Кому интересно, спрашивайте.
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 01 окт 2014, 03:32
Institor
Эммм, так их же можно выбрать запросом прям в отдельную таблицу, не?
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 01 окт 2014, 05:59
ginpetr
Institor писал(а):Эммм, так их же можно выбрать запросом прям в отдельную таблицу, не?
Давайте попробуем, может и правда... Какой текст запроса предложите? Нужно выбрать участки, которые именно пересекаются, т.к. есть случаи, когда зона и участок имеют общие границы.
В моём случае вместо создания тематической карты также можно их запросить, но выборка не изменится при исправлении границ, а тематика перестроится.
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 01 окт 2014, 18:17
Boris
А выложите пример, хотя бы на 10 объектов, что бы мы могли мозг размять. У меня есть пара идей.
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 01 окт 2014, 19:57
ginpetr
Я упражнялся на кадастровом делении. Как это ни удивительно, но участков пересекающих границы кадастровый кварталов там пруд пруди. Но могу смоделировать ситуацию. Завтра на работе.
Главная проблема в участках, имеющих общую границу с зоной (кварталом).
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 01 окт 2014, 20:10
thegeo
Вот вариант запроса решающий эту задачу (сформирован через меню SQL-запрос).
Select lots.ID, zones.Name from lots, zones where lots.Obj Intersects zones.Obj And AreaOverlap(lots.obj,zones.obj)>0 into Selection
Его можно сохранить и при необходимости загружать. На мой взгляд, такой подход более технологичен, требуется всего две операции загрузить запрос и выполнить запрос.
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 01 окт 2014, 20:22
ginpetr
В нашей работе запрос - сомнительная технологичность. Требуется устранить пересечения, на что динамическое обновление колонки и тематика от реагируют сразу, а запрос что? Загружать всякий раз чтоб проверить?
А вот про функцию areaoverlap забываю постоянно, она из относительно новых?
Завтра протестирую Ваш запрос на своих данных, чую не всё так просто.
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 01 окт 2014, 21:11
gamm
thegeo писал(а):Вот вариант запроса решающий эту задачу (сформирован через меню SQL-запрос).
Select lots.ID, zones.Name from lots, zones where lots.Obj Intersects zones.Obj And AreaOverlap(lots.obj,zones.obj)>0 into Selection
такой запрос вроде выберет всех, не хватает чего-то типа
group by(lots.ID)
having(count(*)>1)
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 01 окт 2014, 23:36
thegeo
Приведу еще раз картинку с результатом выполненного запроса. Желтое – зоны, зеленое – участки. Три участка выбрано. Добавлено изображение таблицы выборки в виде списка.
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 02 окт 2014, 05:49
Institor
Да, пожалуй для динамического обновления этот способ единственный. Запрос придется все время вручную обновлять.
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 02 окт 2014, 06:47
ginpetr
Смоделировал...
В архиве пример данных. Рабочий набор сразу откроет с временными колонками, тематикой и выборкой от thegeo.
Можно подвигать узлы и увидеть как изменяется тематика.
Выборка не работает, так как ситуация действительно сложнее (полагаю это я не очень толково объяснил, какого результата нужно достичь).
На рисунках результат.
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 02 окт 2014, 13:21
thegeo
Уточнилась постановка задачи уточнился и запрос. Он несколько усложнился, однако логика его осталась достаточно прозрачной.
Select lots.ID, zones.Name from lots, zones where lots.Obj Intersects zones.Obj And AreaOverlap(lots.obj,zones.obj)<Area(lots.obj,"sq m") And AreaOverlap(lots.obj,zones.obj)>0 into Selection
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 02 окт 2014, 13:31
ginpetr
Я уже пробовал дополнить Ваш запрос таким условием (только со знаком "<>" - дает тот же результат), но на моём примере он почему-то выбирает участки № 11 и 20. Добавил узлы к зонам на углах участков и 11-й "ушёл" из выборки... Может у запроса требования к точности выше?
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 02 окт 2014, 13:42
ginpetr
Так и есть, всё дело в точности. Там границы в результате "внутрипрограммных округлений" зашли друг на друга на 2 мм.
Re: Нахождение одного ЗУ в нескольких территориальных зонах
Добавлено: 02 окт 2014, 14:53
thegeo
Результаты, полученные с использованием ваших данных (рис.1).
Запрос:
Select участки.N, зоны.N from участки, зоны where участки.Obj Intersects зоны.Obj And AreaOverlap(участки.obj,зоны.obj)<Area(участки.obj,"sq m") And AreaOverlap(участки.obj,зоны.obj)>0 into Selection
Для участка 20 можно отметить, что здесь граница зоны пересекает границу участка. Если границы объектов строго совпадают в узлах, такого не будет.
Подредактировал запрос и получил нужный результат (рис.2).
Select участки.N, зоны.N from участки, зоны where участки.Obj Intersects зоны.Obj And AreaOverlap(участки.obj,зоны.obj)<(Area(участки.obj,"sq m")-1) And AreaOverlap(участки.obj,зоны.obj)>0 into Selection
Однако здесь конечно есть некоторый элемент произвола (1 кв.м. точность представления площади в КП). Вероятно, все это имеет связь с точностью представления координат.