Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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: Объекты/Удалить внешнюю часть… |
|
Вернуться к началу |
|
|
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-х узлов), то считываем координаты всех узлов и далее для смежных узлов по этим координатам строим линии. |
|
Вернуться к началу |
|
|
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 всего лишь следование описанию задачи в заданном вопросе. |
|
Вернуться к началу |
|
|
FedorinoFF
Зарегистрирован: 01.02.2007 Сообщения: 272 Откуда: Санкт-Петербург
|
Добавлено: Пн Ноя 10, 2014 10:35 pm Заголовок сообщения: |
|
|
thegeo писал(а): |
Был предложен лишь общий пример. Окончательное решение возможно лишь при полной и корректной постановке задачи... |
чисто формально, фраза "Такие задачи обычно решают как- то так: " не подразумевает какие-то альтернативные решения
thegeo писал(а): |
, да и никто здесь не обязан выкладывать готовые программы |
да, конечно, но форум как раз для того, чтобы помогать коллегам. какая-то дополнительная информация как раз будет, при оптимистичном раскладе, способствовать расширенному изучению вопроса со стороны заинтересованных лиц.
Мой опыт работы с set target ... не увенчался успехом, по крайней мере при попытках использовать его из приложения MapBasic, поэтому я очень настороженно к нему отношусь. |
|
Вернуться к началу |
|
|
FedorinoFF
Зарегистрирован: 01.02.2007 Сообщения: 272 Откуда: Санкт-Петербург
|
Добавлено: Пн Ноя 10, 2014 10:37 pm Заголовок сообщения: |
|
|
Alex писал(а): |
Функция IntersectNodes в части INC_COMMON не работает и в случае использования команды Set coordsys...
Видно что-то важное составители инструкции по MapBasic не дописали в части этой функции. |
а может нет общих узлов? есть еще второе значение параметра у этой функции. а пример файликов можно получить? даже интересно где собака порылась. |
|
Вернуться к началу |
|
|
|