Связать вершины с линиями после корректировки топологии лини

MapInfo, MapBasic
Ответить
dmitrix
Новоприбывший
Сообщения: 2
Зарегистрирован: 02 сен 2016, 10:45
Репутация: 0

Связать вершины с линиями после корректировки топологии лини

Сообщение dmitrix » 02 сен 2016, 11:02

Добрый день, прошу помощи в алгоритме или подборе инструмента для решения следующей задачи:

дано 2 таблицы - линии и точки, обе со своей различной семантикой. Точки представляют собой узлы пересечения (соприкосновения) линий. Количество объектов - десятки тысяч.
В линиях есть проблемы с топологией, нужно удалить разрывы между вершинами линий, например, если они больше 30 см. С этой задачей справляется встроенный инструмент в mapinfo 15. Вершины соединяются сдвигаясь в рамках допустимой погрешности.
При этом точки не меняются, так как находятся в отдельной таблице.

Подскажите, каким образом можно задать точкам новые координаты вершин линий, сохраняя семантику

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 376
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Связать вершины с линиями после корректировки топологии

Сообщение ginpetr » 02 сен 2016, 14:34

Линии или полилинии?
и картинку, если можно.

dmitrix
Новоприбывший
Сообщения: 2
Зарегистрирован: 02 сен 2016, 10:45
Репутация: 0

Re: Связать вершины с линиями после корректировки топологии

Сообщение dmitrix » 04 сен 2016, 20:19

Изначально они линии. После корректировки топологии в мапинфо 15 они становятся полилиниями.
Вложения
точки-линнии-после.PNG
точки-линнии-после.PNG (3.84 КБ) 5170 просмотров
точки-линнии-до.PNG
точки-линнии-до.PNG (4.56 КБ) 5170 просмотров

trir
Гуру
Сообщения: 5287
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Связать вершины с линиями после корректировки топологии

Сообщение trir » 04 сен 2016, 21:36

1. Строим буфер (размер в допуск) от точек
2. Находим пересечения линий с буфером
3. Определяем для линии точку пересечения и меняем её на точку из таблицы точек

thegeo
Активный участник
Сообщения: 160
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: Связать вершины с линиями после корректировки топологии

Сообщение thegeo » 04 сен 2016, 22:18

На мой взгляд без программирования здесь не обойтись. Хотя м.б. в MI15 и появились какие-то специфические штатные средства.
Опишу, как я вижу алгоритм решения задачи:
0. Имеем два слоя myLines (только полилинии) и myPoints (только точки)
1. Делаем копию myLines (myLinesC)
2. На myLinesC объединяем все в один объект
3. Цикл по точкам myPoints:
ob1=ConnectObjects(ob2,ob3,"T")
x=ObjectGeography(ob1, OBJ_GEO_LINEENDX)
y=ObjectGeography(ob1, OBJ_GEO_LINEENDY)
Alter Object ob2 Geography OBJ_GEO_POINTX, x
Alter Object ob2 Geography OBJ_GEO_POINTY, y
Update myPoints obj = ob2 Where RowID = id
Здесь ob2 – текущая точка из myPoints;
ob3 – комбинированный объект со слоя myLinesC;
ob1 – объект линия, от ob2 до ближайшего узла ob3.
PS. Не забудьте установить Set CoordSys

thegeo
Активный участник
Сообщения: 160
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: Связать вершины с линиями после корректировки топологии

Сообщение thegeo » 05 сен 2016, 17:42

Предлагаю программу для решения вашей задачи. Использовалась идея, изложенная в предложенном выше алгоритме (в том виде как он изложен результат не будет получен).
Условия использования:
1. Для ваших таблиц с точками и полилиниями делаете копии с именами myPoints и myLines соответственно. Это полезно и с точки зрения безопасности ваших данных.
2. По окончании работы программы таблицу myLines можно удалить, а таблицу myPoints (результат обработки) можно, по необходимости, переименовать.
Вложения
_после.png
после обработки
_после.png (15.9 КБ) 5087 просмотров
_до.png
до обработки
_до.png (16.05 КБ) 5087 просмотров
PLPoints.zip
(1.67 КБ) 337 скачиваний

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 21 гость