RUS  ENG 

Изменение координат примитива

Страницы: 1
RSS
Изменение координат примитива
 
Здравствуйте, подскажите пожалуйста можно ли запросом или еще как-то присвоить примитивам слоя новые координаты указанные в определенных полях бд данного слоя(Xnew, Ynew к примеру).
 
Только программно, читаете значения из таблицы потом двигаете: https://www.politerm.com/zuludoc/zuluax/index.html#Element_Move.html
 
Спасибо, я этот метод нашел, но не могу пока сообразить как этот макрос под эту задачу переделать...
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


Не подскажите?
Изменено: bgvk - 09.04.2020 19:26:24
 
Цитата
Алексей Аширов написал:
Только программно, читаете значения из таблицы потом двигаете: https://www.politerm.com/zuludoc/zuluax/index.html#Element_Move.html
Sub move ()

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' " помогите как правильно указать поле?
Изменено: bgvk - 10.04.2020 09:32:49
 
Цитата
bgvk написал:
Цитата
Алексей Аширов написал:
Только программно, читаете значения из таблицы потом двигаете: https://www.politerm.com/zuludoc/zuluax/index.html#Element_Move.html


El.MoveToXY "Xn","Yn",True,False

Читайте описание объектной модели, читайте описание VBScript

Sub MoveToXY(X As Double, Y As Double, RedrawView As Boolean, ChangeAngle As Boolean)

Написано X и Y числа, а Вы строки подставляете. Выше нигде Xn и Yn не заданы.

Сценарий такой:
Открываете базу данный,
получаете для заданного ID объекта запись,
в записи находите значения полей X и Y,
и уже получив значения, подставляете их в метод MoveToXY
 
Цитата
Алексей Аширов написал:
Цитата
bgvk написал:
Цитата
Алексей Аширов написал:
Только программно, читаете значения из таблицы потом двигаете: https://www.politerm.com/zuludoc/zuluax/index.html#Element_Move.html


El.MoveToXY "Xn","Yn",True,False
Читайте описание объектной модели, читайте описание VBScript

Sub MoveToXY(X As Double, Y As Double, RedrawView As Boolean, ChangeAngle As Boolean)

Написано X и Y числа, а Вы строки подставляете. Выше нигде Xn и Yn не заданы.

Сценарий такой:
Открываете базу данный,
получаете для заданного ID объекта запись,
в записи находите значения полей X и Y,
и уже получив значения, подставляете их в метод MoveToXY
Подскажите пожалуйста, как взять из БД значение поля чтобы подставить в MoveToXY. Спасибо.
 
Цитата
bgvk написал:
Цитата
Подскажите пожалуйста, как взять из БД значение поля чтобы подставить в MoveToXY. Спасибо.
https://www.politerm.com/samples/zulugis/macros/ReadAndChangeTableRecords/
 
Цитата
Алексей Аширов написал:
Цитата
bgvk написал:
Подскажите пожалуйста, как взять из БД значение поля чтобы подставить в MoveToXY. Спасибо.
https://www.politerm.com/samples/zulugis/macros/ReadAndChangeTableRecords/
Большое спасибо, получилось, но как сделать, чтобы новые значения координат подставлялись именно, как широта и долгота?
 
Цитата
bgvk написал:
Цитата
Алексей Аширов написал:
Цитата
bgvk написал:
Подскажите пожалуйста, как взять из БД значение поля чтобы подставить в MoveToXY. Спасибо.
https://www.politerm.com/samples/zulugis/macros/ReadAndChangeTableRecords/
Большое спасибо, получилось, но как сделать, чтобы новые значения координат подставлялись именно, как широта и долгота?Ghbyb
Либо пересчитывать широту долготу в координаты проекции слоя (нужно изучить объект https://www.politerm.com/zuludoc/zuluax/index.html#CRS_cls.html)

Либо в качестве входной проекции поставить WGS84 https://www.politerm.com/zuludoc/zuluax/index.html#Layer_SetInputCRSProjection.html

Layer.SetInputCRSProjection("EPSG:4326") и внутри будет пересчитываться (заодно проверите)
Страницы: 1