www.map-info.ru :: Просмотр темы - Пересечения, с ними всегда так?
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - ГИС 'MapInfo' Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Вт Окт 28, 2014 2:38 pm    Заголовок сообщения: Пересечения, с ними всегда так? Добавить ответ со ссылкой на данный текст

Уважаемая аудитория, приветствую.
есть нужда через SQL-запрос и его оператор Intersects отыскать точки пересечения полигона и полилинии.
Пример простой: есть полигон.TAB с одним единственным объектом и записью про него ID = 1
есть пересекающая его неким произвольным образом полилиния.TAB с аналогичной записью ID = 1.
Пересекаются объекты, например, в двух точках.
Как разведать точки пересечения и их координаты.
Может есть иной, чем через SQL-запрос, способ.
Как мне удалось узнать, в своем простом проявлении оператор Intersects великолепно работает с объектами одного типа, а вот в случае с разными типами объектов тупик.
Большое спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Окт 28, 2014 3:27 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Select с Intersects - отбирает объекты пересекающиеся с заданными.
Если же нужно отыскать в каких точках они пересекаются, то следом надо использовать функцию IntersectNodes.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Вт Окт 28, 2014 4:48 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

но правильно я понимаю, что Select и Intersects работают с объектами одного слоя или можно их применить для объектов нескольких слоев?

А в части использования IntersectNodes() опыт небольшой есть. Буду экспериментировать.
Спасибо большое.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Вт Окт 28, 2014 5:41 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

не дождался и разобрался.
Если интересует кого-нибудь, то дело обстоит так (для программы на MapBasic):

Select *
From Lines
Where Lines.obj Intersects (Select obj from cAreas where cAreas.ID = 2)
Into Selection

Спасибо
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Ср Окт 29, 2014 10:09 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Да, все верно. Intersect в Select можно использовать для поиска пересечений на разных слоях.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Ср Окт 29, 2014 11:57 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

но есть в этом всем одна хитрость:
Если в

Select *
From Lines
Where Lines.obj Intersects (Select obj from cAreas where cAreas.ID = 2)
Into Selection

значение в поле ID таблицы cAreas, равное ДВУМ, встречается больше, чем для одного объекта, в MapInfo появляется такое предупреждение
"Частичный запрос (подзапрос) возвратил более одного значения".

Т.е. если несколько ОБЪЕКТОВ типа ПЛОЩАДЬ имеют одинаковую характеристику, нет возможности через Intersects в Select установить какие линии пересекают эти ОБЪЕКТЫ?
Тогда альтернатива - предварительно выбирать ОБЪЕКТЫ с одинаковой характеристикой и в этой выборке идти построчно и находить пересечения.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Чт Окт 30, 2014 9:14 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Странно. Не помню такого ограничения. Если секцию Where вообще уберете в подзапросе, тоже выдается такое сообщение? Хотя по сути это означает выбор объектов, пересекающих любой объект из подзапроса.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Чт Окт 30, 2014 11:36 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

С Вашей логикой абсолютно согласен, но
если в подзапросе убираем секцию where, MapInfo показывает аналогичное сообщение:
"Частичный запрос (подзапрос) возвратил более одного значения".
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
thegeo



Зарегистрирован: 17.01.2012
Сообщения: 119

СообщениеДобавлено: Чт Окт 30, 2014 1:43 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Ничто не мешает переформулировать запрос
Select * from Lines,cAreas where cAreas.ID=2 and cAreas.Obj Intersects Lines.Obj into Selection
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Пт Окт 31, 2014 12:20 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Знаете, а действительно, если нескольким объектам cAreas.ID присвоить одинаковое значение, например, число 2, то предложенная г-м thegeo строка позволит показать линии слоя Lines, что пересекают объекты cAreas.

Большое спасибо.
Всем приятных выходных.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - ГИС 'MapInfo' Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru