Нахождение одного ЗУ в нескольких территориальных зонах

MapInfo, MapBasic
Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение ginpetr » 30 сен 2014, 07:53

Хочу поделиться способом чёткой визуализации проблемных мест в ПЗиЗ или Генплане (пересечения ЗУ границей территориальной или функциональной зоны) имеющимися средствами Мапинфо. Давно думал и только сегодня осенило.
1. Имеем две таблицы: ЗУ (земельные участки) и ТЗ (территориальные зоны)
2. Таблица --> Обновить колонку...--> Обновить таблицу: ЗУ --> Обновить колонку: Добавить новую временную колонку --> Значения извлечь из: ТЗ -->Обединение: Объект из таблицы ТЗ содержит объект из таблицы ЗУ-->Вычислить: Значение-->Для: Выражение: Area(obj,"hectare")-->OK
2. Таблица --> Обновить колонку...--> Обновить таблицу: ЗУ --> Обновить колонку: Добавить новую временную колонку --> Значения извлечь из: ТЗ -->Обединение: Объект из таблицы ТЗ пересекает объект из таблицы ЗУ-->Вычислить: Proportion Avg-->Для: Выражение: Area(obj,"hectare")-->OK

' Если у земельного участка эти два полученных значения разные, то он пересекается границей ТЗ.

3. Карта-->Создать тематическую карту-->Отдельные значения-->Индивидуальные значения регионов-->Далее-->Таблица: ЗУ-->Поле:Выражение:Первая полученная временная колонка = Вторая полученная временная колонка --> Далее-->Назначаем цвета (я для пересекаемых участков назначил ярко красный цвет, для других без заливки и убрал галочку Заменить стиль слоя)-->OK

Проблемные участки выделяются цветом "динамически", при исправлении границы ТЗ заливка исчезает. Главное, что не показываются проблемными участки, граница которых частично совпадает с границей ТЗ (раньше не мог от этого избавиться).

Высшей математики тут нет, пишу, зная, как мало пользователей Мапинфо использует Выражения и Тематические карты в работе.
Кому интересно, спрашивайте.
Вложения
Untitled.jpg
Вот так это выглядит
Untitled.jpg (1.23 МБ) 11423 просмотра

Аватара пользователя
Institor
Активный участник
Сообщения: 243
Зарегистрирован: 22 апр 2011, 08:10
Репутация: 27
Откуда: Хабаровск

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение Institor » 01 окт 2014, 03:32

Эммм, так их же можно выбрать запросом прям в отдельную таблицу, не?

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение ginpetr » 01 окт 2014, 05:59

Institor писал(а):Эммм, так их же можно выбрать запросом прям в отдельную таблицу, не?
Давайте попробуем, может и правда... Какой текст запроса предложите? Нужно выбрать участки, которые именно пересекаются, т.к. есть случаи, когда зона и участок имеют общие границы.
В моём случае вместо создания тематической карты также можно их запросить, но выборка не изменится при исправлении границ, а тематика перестроится.

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение Boris » 01 окт 2014, 18:17

А выложите пример, хотя бы на 10 объектов, что бы мы могли мозг размять. У меня есть пара идей.

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение ginpetr » 01 окт 2014, 19:57

Я упражнялся на кадастровом делении. Как это ни удивительно, но участков пересекающих границы кадастровый кварталов там пруд пруди. Но могу смоделировать ситуацию. Завтра на работе.
Главная проблема в участках, имеющих общую границу с зоной (кварталом).

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение thegeo » 01 окт 2014, 20:10

Вот вариант запроса решающий эту задачу (сформирован через меню SQL-запрос).
Select lots.ID, zones.Name from lots, zones where lots.Obj Intersects zones.Obj And AreaOverlap(lots.obj,zones.obj)>0 into Selection
Его можно сохранить и при необходимости загружать. На мой взгляд, такой подход более технологичен, требуется всего две операции загрузить запрос и выполнить запрос.
Вложения
miHG020.png
miHG020.png (11.75 КБ) 11309 просмотров

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение ginpetr » 01 окт 2014, 20:22

В нашей работе запрос - сомнительная технологичность. Требуется устранить пересечения, на что динамическое обновление колонки и тематика от реагируют сразу, а запрос что? Загружать всякий раз чтоб проверить?
А вот про функцию areaoverlap забываю постоянно, она из относительно новых?
Завтра протестирую Ваш запрос на своих данных, чую не всё так просто.

gamm
Гуру
Сообщения: 4168
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение gamm » 01 окт 2014, 21:11

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)

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение thegeo » 01 окт 2014, 23:36

Приведу еще раз картинку с результатом выполненного запроса. Желтое – зоны, зеленое – участки. Три участка выбрано. Добавлено изображение таблицы выборки в виде списка.
Вложения
miHG021.png
miHG021.png (14.12 КБ) 11273 просмотра

Аватара пользователя
Institor
Активный участник
Сообщения: 243
Зарегистрирован: 22 апр 2011, 08:10
Репутация: 27
Откуда: Хабаровск

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение Institor » 02 окт 2014, 05:49

Да, пожалуй для динамического обновления этот способ единственный. Запрос придется все время вручную обновлять.

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение ginpetr » 02 окт 2014, 06:47

Смоделировал...
В архиве пример данных. Рабочий набор сразу откроет с временными колонками, тематикой и выборкой от thegeo.
Можно подвигать узлы и увидеть как изменяется тематика.
Выборка не работает, так как ситуация действительно сложнее (полагаю это я не очень толково объяснил, какого результата нужно достичь).
На рисунках результат.
Вложения
сп2.jpg
Запрос участки.Obj intersects зоны.Obj and areaoverlap(участки.obj,зоны.obj)>0
сп2.jpg (3.89 МБ) 11234 просмотра
сп1.jpg
Динамическое обновление
сп1.jpg (2.75 МБ) 11234 просмотра
ЗУ.zip
Пример данных
(6.37 КБ) 354 скачивания

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение thegeo » 02 окт 2014, 13:21

Уточнилась постановка задачи уточнился и запрос. Он несколько усложнился, однако логика его осталась достаточно прозрачной.
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
Вложения
miHG022.png
miHG022.png (11.56 КБ) 11206 просмотров

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение ginpetr » 02 окт 2014, 13:31

Я уже пробовал дополнить Ваш запрос таким условием (только со знаком "<>" - дает тот же результат), но на моём примере он почему-то выбирает участки № 11 и 20. Добавил узлы к зонам на углах участков и 11-й "ушёл" из выборки... Может у запроса требования к точности выше?

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение ginpetr » 02 окт 2014, 13:42

Так и есть, всё дело в точности. Там границы в результате "внутрипрограммных округлений" зашли друг на друга на 2 мм.

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: Нахождение одного ЗУ в нескольких территориальных зонах

Сообщение thegeo » 02 окт 2014, 14:53

Результаты, полученные с использованием ваших данных (рис.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 кв.м. точность представления площади в КП). Вероятно, все это имеет связь с точностью представления координат.
Вложения
miHG027.png
рис.2
miHG027.png (23.88 КБ) 11182 просмотра
miHG026.png
рис.1
miHG026.png (25.07 КБ) 11182 просмотра

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя