Сравнение площадных объектов

MapInfo, MapBasic
Ответить
Old_NICK
Интересующийся
Сообщения: 36
Зарегистрирован: 17 апр 2014, 14:10
Репутация: 0

Сравнение площадных объектов

Сообщение Old_NICK » 28 апр 2016, 11:39

Коллеги, добрый день.
Может кто подскажет:
Как стандартными средствами сравнить площадные объекты из разных слоев на:
//сравнить - имеется ввиду: найти это и вычислить площадь
- объект имущества (ОИ) полностью лежит внутри земельного участка (ЗУ);
- ОИ частично выходит за пределы ЗУ; (интересует внешняя часть площади)
- ОИ не лежит на ЗУ.

СПАСИБО.
Вложения
Снимок001.PNG
Снимок001.PNG (19.14 КБ) 3473 просмотра
Изображение

Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Сравнение площадных объектов

Сообщение Slinger » 28 апр 2016, 12:44

1) Select * From ОИ Where ОИ.obj Within ЗУ.obj (Возможно, Within надо будет заменить на Entirely Within. Это даст чуть другой результат, но в обоих случаях получите ОИ, лежащие внутри ЗУ, либо на границах с ЗУ)

2) Делаете слой с ОИ редактируемым и изменяемым (Ctrl + T). Далее SQL запрос Select * From ОИ Where ОИ.obj Intersects ЗУ.obj. Получите пересекаемые с ЗУ объекты. Затем резрезаете ОИ (объекты - разрезать). Затем SQL запрос Select * From ОИ Where ОИ.obj Within ЗУ.obj. Получите объекты внутри ЗУ. Удаляете их. В итоге получите кусочки ОИ за пределами ЗУ. Возможно в самом начале надо удалить те участки, которые вообще не пересекаются с ЗУ. Для это используйте запрос Select * From ОИ Where ОИ.obj Intersects ЗУ.obj и затем "обратить выборку".

3) То же самое. Select * From ОИ Where ОИ.obj Intersects ЗУ.obj и затем "обратить выборку".

Old_NICK
Интересующийся
Сообщения: 36
Зарегистрирован: 17 апр 2014, 14:10
Репутация: 0

Re: Сравнение площадных объектов

Сообщение Old_NICK » 28 апр 2016, 13:32

Спасибо за идеи. Результат чуть позже.
Изображение

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

Re: Сравнение площадных объектов

Сообщение Boris » 30 апр 2016, 20:33

Есть такая замечательная функция MapBasic'а ProportionOverlap( object1, object2 ), которая отвечает сразу на все вопросы. Единственное отличие от вопроса, это то, что она говорит "сколько входит, а не сколько не входит".

Код: Выделить всё

Return Value 
A float value equal to AreaOverlap( object1, object2 ) / Area( object1 ). 
И запрос тогда выглядит так:
Select ID1,ID2, (1-ProportionOverlap( ОИ.obj, ЗУ.obj )) "Res" From ОИ Where ОИ.obj Intersects ЗУ.obj

Ответить

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

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

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