Страница 1 из 1

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

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

СПАСИБО.

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

Добавлено: 28 апр 2016, 12:44
Slinger
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 и затем "обратить выборку".

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

Добавлено: 28 апр 2016, 13:32
Old_NICK
Спасибо за идеи. Результат чуть позже.

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

Добавлено: 30 апр 2016, 20:33
Boris
Есть такая замечательная функция 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