Здравствуйте, подскажите пожалуйста можно ли запросом или еще как-то присвоить примитивам слоя новые координаты указанные в определенных полях бд данного слоя(Xnew, Ynew к примеру).
Изменение координат примитива
09.04.2020 18:37:19
|
|
|
|
09.04.2020 19:03:21
Только программно, читаете значения из таблицы потом двигаете:
|
|
|
|
09.04.2020 19:15:44
Спасибо, я этот метод нашел, но не могу пока сообразить как этот макрос под эту задачу переделать...
Sub GetLatLon() 'На момент запуска макроса необходимо открыть карту, активировать слой Set L = Zulu.ActiveMapDoc.Layers.Active ' Создали объект объект базы данных Zulu Set Db = CreateObject("Zb.Database") 'Проекция слоя Set CRS1 = L.GetCrs() 'Создание проекция WGS84 Set CRS_WGS84 = CreateObject("zululib.CRS") CRS_WGS84.InitByCode("EPSG:4326") 'Открыли базу данных для типа -1 (примитивы) Db.Open L.ObjectTypes.Item(2).BaseName 'Список ключей объектов слоя Set Keys = L.ElementKeys 'По всем объектам слоя For i = 1 To Keys.Count Set El = L.Elements.getElement(Keys.Item(i)) 'Если объект примитив If El.TypeID = 2 Then 'Получаем точку центра объекта в координатах проекции слоя Set Pt = El.GetCenter() 'Получаем широту и долготу точки в WGS84 Set Pt = CRS1.GetConvertPoint(Pt.X, Pt.Y, CRS_WGS84) 'Записываем широту и долготу в соответствующие поля ("X" и "Y") Db.UpdateBaseRecord Keys.Item(i), "X" + CHR(10) + "Y", CStr(Pt.X) + CHR(10) + CStr(Pt.Y), 0 End If Next End Sub Не подскажите?
Изменено: |
|
|
|
10.04.2020 09:01:18
Set L = Zulu.ActiveMapDoc.Layers.Active Set Db = CreateObject("Zb.Database") Set CRS1 = L.GetCrs() Set CRS_WGS84 = CreateObject("zululib.CRS") CRS_WGS84.InitByCode("EPSG:4326") Db.Open L.ObjectTypes.Item(2).BaseName Set Keys = L.ElementKeys For i = 1 To Keys.Count Set El = L.Elements.getElement(Keys.Item(i)) If El.TypeID = 2 Then Set Pt = El.GetCenter() El.MoveToXY "Xn","Yn",True,False 'Set Pt = CRS1.GetConvertPoint(Pt.X, Pt.Y, CRS_WGS84) 'Db.UpdateBaseRecord Keys.Item(i), "X" + CHR(10) + "Y", CStr(Pt.X) + CHR(10) + CStr(Pt.Y),0 End If Next End Sub Если в строке El.MoveToXY "Xn","Yn",True,False вместо Xn и Yn задавать число примитив переносится, как правильно задать поле бд (с именем поля Xn и Yn) и какой тип поля должен быть? А то у меня при выполнении ошибку выдает "Несоответствие типа 'El.MoveToXY' " помогите как правильно указать поле?
Изменено: |
|||
|
|
10.04.2020 09:56:39
Sub MoveToXY(X As Double, Y As Double, RedrawView As Boolean, ChangeAngle As Boolean) Написано X и Y числа, а Вы строки подставляете. Выше нигде Xn и Yn не заданы. Сценарий такой: Открываете базу данный, получаете для заданного ID объекта запись, в записи находите значения полей X и Y, и уже получив значения, подставляете их в метод MoveToXY |
|||||
|
|
13.04.2020 10:12:23
|
|||||||
|
|
13.04.2020 10:16:38
|
|||||
|
|
13.04.2020 14:42:37
|
|||||
|
|
13.04.2020 14:54:50
Либо в качестве входной проекции поставить WGS84 Layer.SetInputCRSProjection("EPSG:4326") и внутри будет пересчитываться (заодно проверите) |
|||||||
|
|
||||||