RUS  ENG 

Программно изменить координаты вершин полилинии

Страницы: 1
RSS
Программно изменить координаты вершин полилинии
 
А можно ли программно изменить координаты вершин объекта, например полилинии?
Пробовал Element.Polyline.Fill - вроде отрабатывает, но ничего не меняется. :(
А других методов не нашел.
Через Points вроде тоже только считывать можно, менять нельзя.

Если изменить нельзя - то какой выход:
1) удалять старый элемент,
2) создавать элемент с новыми координатами
3) изменять id созданного элемента на старый.

id-ы нужно сохранять из-за связки с базой данных.
Мне кажется, это не совсем корректно, да и база разбухает.
А перепаковка слоя изменит idы объектов, что не допустимо.
 
У объекта сейчас один метод, позволяющий двигать вершины MoveNode, например, сдвинуть первую вершину ломаной на 100 метров по X и 50 метров по Y (все проверки опускаю):

Dim pl As PolyLine
Set pl = MapCtrl1.Map.Layers.Active.Elements.Item(MapCtrl1.CurrentID).PolyLine
MapCtrl1.Map.Layers.Active.Elements.Item(MapCtrl1.CurrentID).MoveNode pl.GetX(1), pl.GetY(1), 10000, 5000, True, 0

Можно и так, как описали 1) 2) 3) База пухнет, можно вызывать оптимизацию, но согласен, лучше нам добавить методы SetPolyline и т.д. Добавим.
 
Спасибо большое, за оперативный ответ! Еще два вопроса:
1) А есть ли метод, позволяющий удалять вершины?
2) Можно ли оптимизировать слой, при этом сохранив idы существующих объектов?
 
1. Нет, сейчас нету. Нужно добавлять.
2. ZuluTools.LayerOptimize Сжатие и оптимизация слоя ID не трогают. Просто сжимает расбухшее после редактирования и пространственную оптимизацию. А ID как были, так и есть.
 
Еще раз спасибо! Ждём появления новых функций!

Мы разрабатываем механизм синхронизации отдельных слоев карты Zulu со сторонней ГИС-системой (через формат mif/mid).
Наше приложение создает из mif-mid определенные типовые объекты на заданном слое Zulu, прописывает необходимые семантики,
в том числе соответствия id объектов Zulu ключевым полям сторонней системы.
Осталось дописать логику обновления информации об объектах. Например, если объект поменял свои координаты, или форму.
 
По редактированию объектов добавился ряд методов. Описание на сайте обновлено и Zulu.chm и online

Удалить пятую вершину, например, площадного объекта можно так:

dim Ret as Boolean
dim C as Contour
Set Contour = Layer1.Element(ID).Contour
Ret = Contour.DeletePoint (5)
Ret = Layer1.Element(ID).SetContour ©

Аналогично и с полилиниями, PolyLine.DeletePoint, Element.SetPolyLine

Т.е. сперва получаем геометрический объект от элемента слоя, дальше его редактируем (вставляем, удаляем вершины), а затем присваиваем элементу слоя обновленный геометрический объект
Страницы: 1