Подскажите, пожалуйста, как с помощью MapBasic получить результат (новые объекты) пересечения всех полигональных объектов одного слоя со всеми полигональными объектами другого.
Вообще-то несложно написать код подобной процедуры, но попробуйте это сделать сами. Элементарная операция: На слое А выделите объект. Выполните Объекты/Выбрать изменяемый объект. Теперь выделите пересекающий его объект на слое Б. Выполните Объекты/Удалить внешнюю часть. Протокол выполнения этой операции найдете в окне MapBasic. Осталось только подумать как организовать цикл по объектам слоя А с использованием этой элементарной операции. PS. Полезная книга«Программирование для MapInfo на примерах»(http://mapbasic.ru/download).
Вариант процедуры Код: sub itrs(byval tab1 as string,byval tab2 as string,byval pth_tab1_copy as string) OnError Goto ex dim strName as string strName=TempFileName$(pth_tab1_copy) pth_tab1_copy=Left$(strName,len(strName)-3) & "tab" Commit Table tab1 As pth_tab1_copy TYPE NATIVE Charset "WindowsCyrillic" Interactive Open Table pth_tab1_copy Interactive dim tb1copy as string tb1copy=PathToTableName$(pth_tab1_copy) Add Map Auto Layer tb1copy select * from tb1copy where str$(obj)="Region" into tb1copy2 Set Target On select * from tb2 where str$(obj)="Region" Objects Intersect Into Target ex: if err()>0 then note Error$() end if OnError GoTo 0 End Sub Здесь tab1, tab2 – имена таблиц; pth_tab1_copy – папка в которой будет храниться таблица с результатом. Обращение к процедуре Код: call itrs("tb1","tb2","C:\03")
как пример: есть два слоя на карте GREEN и WATER(парки и пруды), задача после оцыфровки выявить не накладываются ли слои между собой, в частности GREEN на WATER. SQL-запрос из таблицы: GREEN, WATER(первым выбирается слой интереса) - выпадающее окно "таблицы" с условием: GREEN.Obj Intersects WATER.Obj (колонки) (операторы) (колонки) Выдается таблица объектов и отмечаются объекты на карте. все просто) Если нужно найти объекты с определенной семантикой, то запрос усложняется в условиях.
Ну вы и напридумывали)) Задача решается стандартными средствами Mapinfo, зачем писать какую-то программу? Нужно все объекты скопировать в один слой. Затем выделить все объекты. И команда "Объекты - Проверка полигонов - Обнаружение перекрытий - Найти". Мапинфо создает желтые полигоны на перекрытиях, выбираете их по стилю и сохраняете в новый слой. Готово!
И зачем писать какую-то программу, а люди все пишут и пишут. Действительно многие операции можно выполнить, используя лишь штатные средства MapInfo. Для рассматриваемой задачи распишу всю процедуру пошагово: Выбрать все площадные объекты на слое А. Выполнить операцию "Сохранить копию" для выборки Selection. Загрузить эту копию (В). Выбрать все площадные объекты на слое Б. Выполнить копирование этой выборки и вставку ее на слой В. Выбрать все объекты на слое В. Выполнить "Объекты/Проверка регионов/Обнаружение перекрытий" Для выделенных перекрытий выполнить операцию "Сохранить копию" Загрузить эту копию. Удалить таблицу В как уже не нужную. Вроде бы не так и сложно. Но если нужно выполнять эту процедуру многократно и если добавить вообще-то неизбежные ошибки оператора (чем длиннее процедура, тем более вероятны ошибки) то оптимизм тает. Я могу это выполнить раз другой но не больше. Поэтому и пишут программы, чтобы реализовывать подобные процедуры за одно нажатие кнопки.
Есть похожая проблема. Имеем трассу нефтепровода и очень большое количество земельных участков, стоящих на кадастровом учете. Необходимо выбрать все пересечения нефтепровода с участками. Буду признателен за подходящие идеи.
Кажется совсем не сложно. А можно поподробнее, что такое БД, и как выполнить запрос. Заранее благодарен.
Добрый день! У меня похожая проблема, есть линейный объект "кабельная линия" в одной таблице и есть земельные участки стоящие на кадастровом учете в другой таблице. У меня стоит задача составить перечень участков по которым проходит кабельная линия. Совсем не разбираюсь в базах данных. Нет ли какого нибудь готового запроса в мапинфо для этого? Может с помощью SQL-запроса, только что там писать?
Добрый день! есть два слоя ! 1 кварталы, 2 ЗУ . задача такая найти ЗУ пересекающие 2 квартала и их площадь пересечения?