Страница 1 из 1

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

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

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

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

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

Добавлено: 02 сен 2016, 14:34
ginpetr
Линии или полилинии?
и картинку, если можно.

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

Добавлено: 04 сен 2016, 20:19
dmitrix
Изначально они линии. После корректировки топологии в мапинфо 15 они становятся полилиниями.

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

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

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

Добавлено: 04 сен 2016, 22:18
thegeo
На мой взгляд без программирования здесь не обойтись. Хотя м.б. в 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

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

Добавлено: 05 сен 2016, 17:42
thegeo
Предлагаю программу для решения вашей задачи. Использовалась идея, изложенная в предложенном выше алгоритме (в том виде как он изложен результат не будет получен).
Условия использования:
1. Для ваших таблиц с точками и полилиниями делаете копии с именами myPoints и myLines соответственно. Это полезно и с точки зрения безопасности ваших данных.
2. По окончании работы программы таблицу myLines можно удалить, а таблицу myPoints (результат обработки) можно, по необходимости, переименовать.