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

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  
На страницу 1, 2  След.
 
   Список форумов www.map-info.ru | Форум - ГИС 'MapInfo' Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Alex



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

СообщениеДобавлено: Пт Ноя 07, 2014 9:52 pm    Заголовок сообщения: Снова о пересечениях Добавить ответ со ссылкой на данный текст

здравствуйте, уважаемая аудитория.
можно ли сделать так, что функция Intersectnodes() позволит возвратить след (полилинию) пересечения площадного объекта линейным?
С частью этой функции INCL_CROSSINGS получается линия, соединяющая точки пересечения границ площадного объекта с линейным объектом.
Я полагаю, что составляющая INCL_COMMON рассматриваемой функции позволит выделить в самостоятельную полилинии СЛЕД пересечения этих объектов.
Но не получается.
При выполнении программы сразу же в MapInfo появляется сообщение
"Пустой объект в таблицу или в отчет внести нельзя"
Вот.
Так как быть?
Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Ноя 07, 2014 9:57 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

смотря какая задача и что вы делаете, хотитет сделать. Откуда у вас получаются объекты, которые не пересекаются? (об этом свидетельствует сообщение об ошибке, которое можно трактовать как "после пересечения двух объектов не обнаружено точек пересечения", следовательно, появляется "пустой объект", который невозможно вставить в таблицу)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex



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

СообщениеДобавлено: Пт Ноя 07, 2014 11:47 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Вот что есть исходный материал:
слой Areas с одним полигоном и записью о нем ID = 1
слой Roads с одной ломаной линией (полилинией) с записью ID = 1.
Полилиния пересекает полигон и касается его границ в двух точках.
Требуется:
вернуть линию пересечения объектов Areas и Roads, которая лежит в границах полигона, т.е. ту часть объекта Roads, что лежит в границах объекта Areas.

когда на MapBasic так:

Dim oA, oR As Object
Fetch First From Areas
oA = Areas.obj

Fetch First From Roads
oR = Roads.obj

Insert Into Line (ID, obj)
Values (1, IntersectNodes(oA, oR, INCL_CROSSINGS))

В таблице Line есть результатом ПРЯМАЯ линия, соединяющая точки пересечения объекта Roads с границами объекта Areas.
А хочется получить не ПРЯМУЮ линию, а ту часть ЛОМАНОЙ линии Roads, что лежит в границах Areas.

Если такой текст:
Insert Into Line (ID, obj)
Values (1, IntersectNodes(oA, oR, INCL_COMMON))

MapInfo ругается, что объект пустой и так далее.

Может я жду от функции IntersectNodes чего-то невозможного, тогда как получить другим путем, если выражение INCL_COMMON здесь не применимо?
Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
thegeo



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

СообщениеДобавлено: Сб Ноя 08, 2014 3:03 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Такие задачи обычно решают как- то так:

Dim oA As Object
Fetch First From AR
oA = AR.obj
select * from RD Where oA Intersects obj
Set Target On
select * from AR Where ID=1
Objects Intersect Into Target Data ID=2

Это соответствует процедуре MapInfo: Объекты/Удалить внешнюю часть…
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex



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

СообщениеДобавлено: Сб Ноя 08, 2014 3:30 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Спасибо.
сейчас испробую этот подход.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex



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

СообщениеДобавлено: Сб Ноя 08, 2014 7:03 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Работает.
Спасибо за оперативный ответ.
Вот почему не работает вариант, где использовался IntersectNodes(oA, oR, INCL_COMMON не понятно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex



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

СообщениеДобавлено: Сб Ноя 08, 2014 8:44 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Может у кого ест РЕЦЕПТ как ПОЛИГОН превратить в набор ПОЛИЛИНИЙ или так невозможно сделать?
Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
thegeo



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

СообщениеДобавлено: Сб Ноя 08, 2014 9:53 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Есть такой оператор

Objects Pline Split At Node index …

Разделяет простую полилинию на две простые полилинии в узле index. Для перехода от области к полилинии используют ConvertToPline(object).
Если же нужно полилинию (границу области) представить в виде набора линий (полилиний из 2-х узлов), то считываем координаты всех узлов и далее для смежных узлов по этим координатам строим линии.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex



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

СообщениеДобавлено: Вс Ноя 09, 2014 12:06 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Все работает волшебно.
Спасибо большое.
Воспользовался функцией ConvertToPline(object).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Вс Ноя 09, 2014 9:01 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

thegeo писал(а):
Такие задачи обычно решают как- то так:

Dim oA As Object
Fetch First From AR
oA = AR.obj
select * from RD Where oA Intersects obj
Set Target On
select * from AR Where ID=1
Objects Intersect Into Target Data ID=2

Это соответствует процедуре MapInfo: Объекты/Удалить внешнюю часть…

Все, конечно, круто, но что будет, если нет внутренней части? т.е. нет пересечения. операция не безопасна... Кроме этого, жестко заданы ID записей с объектами - это не интересно.
простой IntersectNodes() тоже должен работать. Может быть не хвататает команды set coordsys... перед проведением пересечения?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex



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

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

С командой Set coordsys... я знаком.
Пробую и всем расскажу, что из этого получается.
Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex



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

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

Функция IntersectNodes в части INC_COMMON не работает и в случае использования команды Set coordsys...
Видно что-то важное составители инструкции по MapBasic не дописали в части этой функции.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
thegeo



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

СообщениеДобавлено: Пн Ноя 10, 2014 1:21 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

FedorinoFF писал(а):

Все, конечно, круто, но что будет, если нет внутренней части? т.е. нет пересечения. операция не безопасна... Кроме этого, жестко заданы ID записей с объектами - это не интересно.


Был предложен лишь общий пример. Окончательное решение возможно лишь при полной и корректной постановке задачи, да и никто здесь не обязан выкладывать готовые программы. Кроме того:
* Наличие пересечений легко проверяется.
* Использование конкретного значения ID всего лишь следование описанию задачи в заданном вопросе.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Пн Ноя 10, 2014 10:35 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

thegeo писал(а):

Был предложен лишь общий пример. Окончательное решение возможно лишь при полной и корректной постановке задачи...

чисто формально, фраза "Такие задачи обычно решают как- то так: " не подразумевает какие-то альтернативные решения Smile

thegeo писал(а):

, да и никто здесь не обязан выкладывать готовые программы

да, конечно, но форум как раз для того, чтобы помогать коллегам. какая-то дополнительная информация как раз будет, при оптимистичном раскладе, способствовать расширенному изучению вопроса со стороны заинтересованных лиц.
Мой опыт работы с set target ... не увенчался успехом, по крайней мере при попытках использовать его из приложения MapBasic, поэтому я очень настороженно к нему отношусь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Пн Ноя 10, 2014 10:37 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Alex писал(а):
Функция IntersectNodes в части INC_COMMON не работает и в случае использования команды Set coordsys...
Видно что-то важное составители инструкции по MapBasic не дописали в части этой функции.

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

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


Top.Mail.Ru