Страница 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 (результат обработки) можно, по необходимости, переименовать.