Обратите внимание на индексы, которые Вы указываете в массиве. При сохранении точек полилинии указываете индекс номера полилинии, а не индекс узла. В итоге в каждом элементе массива у Вас содержатся данные о последней точке полилинии.
Рекомендую каждую часть сложной(имеющей более одной части) полилинии рассматривать как отдельную полилинию.
Предлагаю, структуру для хранения данных об узлах объявить как:
Type Node pline_id As Integer ' ссылка на номер записи в таблице x As Float 'координата X узла полилинии y As Float 'координата Y узла полилинии End TypeДля определения размерности массива можно воспользоваться выражением, в котором подсчитывается количество частей во всех полилиниях в таблице road. Результат нужно умножить на 2, т.к. из каждой полилинии мы берем 2 точки (начало и конец):
Dim size As Integer Dim nodes() as Node 'массив для хранения данных о конечных узлах Select Sum(ObjectInfo(Obj,OBJ_INFO_NPOLYGONS)) From road Where ObjectInfo(Obj, OBJ_INFO_TYPE) = OBJ_TYPE_PLINE Into _tmp Fetch First from _tmp Size = _tmp.Col1 Close Table _tmp ReDim nodes (Size*2) 'задаем размерность массиваПроизводим считывание информации об узлах:
Dim part_num, parts_count, index As Integer Fetch First From road index = 1 ' устанавливаем индекс на первый элемент массива While Not EOT(road) 'цикл по объектам таблицы road If ObjectInfo(road.obj,OBJ_INFO_TYPE) = OBJ_TYPE_PLINE Then ' проверка на то, что выбранный объект является полилинией parts_count = ObjectInfo(road.obj, OBJ_INFO_NPOLYGONS) ' определение количества частей For part_num = 1 to parts_count 'цикл по частям полилинии 'читаем информацию о начальном узле nodes(index).pline_id = road.RowId nodes(index).x = ObjectNodeX(road.obj, part_num, 1) nodes(index).y = ObjectNodeY(road.obj, part_num, 1) index = index + 1 'меняем индекс текущего элемента массива 'читаем информацию о конечном узле nodes(index).pline_id = road.RowId nodes(index).x = ObjectNodeX(road.obj, part_num, ObectInfo(road.obj,OBJ_INFO_NPOLYGONS+part_num)) nodes(index).y = ObjectNodeY(road.obj, part_num, ObectInfo(road.obj,OBJ_INFO_NPOLYGONS+part_num)) index = index + 1 'меняем индекс текущего элемента массива Next End If Fetch Next From road WendКак то так...
Сообщение отредактировал swatch: 03.03.2010, 16:14:38