Здравствуйте. 1. Пытаюсь адапртировать пример с сайта. Не работает, проблема в записи в БД. Сами координаты читает, проверил через MsgBox. Пытаюсь писать в таблицу Потребитель, которая выглядит вот так (см. картинку). x, y - тип Вещественное 2. Где найти список типов ZuluThermo? То, что 3 - это потребитель - пришлось искать в примерах. 3. Возможно ли чтение координат в метрах с локальной сетки? https://ibb.co/nkJB73P https://ibb.co/yXd6XYR
Код
Sub gure
'Пример записи географических координат центра объекта в таблицу
'Текущая активная карта
Set Doc = Zulu.ActiveMapDoc
'Активный слой текущей карты
Set L = Doc.Layers.Active
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.BaseName
'Список ключей объектов слоя
Set Keys = L.ElementKeys
'По всем объектам слоя
For i = 1 To Keys.Count
Set El = L.Elements.getElement(Keys.Item(i))
'MsgBox "L.Elements.getElement(Keys.Item(i)) = " & L.Elements.getElement(Keys.Item(i))
'Если объект примитив
If El.TypeID = 3 Then
'Получаем точку центра объекта в координатах проекции слоя
Set Pt = El.GetCenter()
'MsgBox "El.GetCenter(5) = " & El.GetCenter(5)
'Получаем широту и долготу точки в WGS84
Set Pt = CRS1.GetConvertPoint(Pt.X, Pt.Y, CRS_WGS84)
MsgBox "CRS1.GetConvertPoint(Pt.X, Pt.Y, CRS_WGS84) = " & CStr(Pt.X)
If pt.IsValid = False Then
MsgBox "Ошибка преобразования"
End If
'Записываем широту и долготу в соответствующие поля ("X" и "Y")
Db.UpdateBaseRecord Keys.Item(i), "x" + CHR(10) + "y", CStr(Pt.X) + CHR(10) + CStr(Pt.Y), 0
Db.UpdateBaseRecord Keys.Item(i), "x", CStr(Pt.X), 0
Db.UpdateBaseRecord Keys.Item(i), "y", CStr(Pt.Y), 0
'MsgBox "Обновлено " & PT & "записей"
End If
Next
MsgBox "Обновлено записей"
End Sub
написал: Здравствуйте. 1. Пытаюсь адапртировать пример с сайта. Не работает, проблема в записи в БД. Сами координаты читает, проверил через MsgBox. Пытаюсь писать в таблицу Потребитель, которая выглядит вот так (см. картинку). x, y - тип Вещественное 2. Где найти список типов ZuluThermo? То, что 3 - это потребитель - пришлось искать в примерах. 3. Возможно ли чтение координат в метрах с локальной сетки?
Код
'Открыли базу данных для типа -1 (примитивы)
Db.Open L.BaseName
Добрый день. База для записи, видимо, нужна не для типа -1, а для типа 3
Код
Db.Open L.ObjectTypes.Item(3).BaseName
Уточните, что такое чтение координат с локальной сетки?
Sub gure
'Пример записи географических координат центра объекта в таблицу
'Текущая активная карта
Set Doc = Zulu.ActiveMapDoc
'Активный слой текущей карты
Set L = Doc.Layers.Active
Set Db = CreateObject("zb.database")
'Проекция слоя
Set CRS1 = L.GetCrs()
'Создание проекция WGS84
Set CRS_WGS84 = CreateObject("zululib.CRS")
CRS_WGS84.InitByCode("EPSG:4326")
'Открыли базу данных для типа 3
Db.Open L.ObjectTypes.Item(3).BaseName
'Список ключей объектов слоя
Set Keys = L.ElementKeys
'По всем объектам слоя
For i = 1 To Keys.Count
Set El = L.Elements.getElement(Keys.Item(i))
'MsgBox "L.Elements.getElement(Keys.Item(i)) = " & L.Elements.getElement(Keys.Item(i))
'Если объект примитив
If El.TypeID = 3 Then
'Получаем точку центра объекта в координатах проекции слоя
Set Pt = El.GetCenter()
'Получаем широту и долготу точки в WGS84
Set Pt = CRS1.GetConvertPoint(Pt.X, Pt.Y, CRS_WGS84)
'MsgBox "CRS1.GetConvertPoint(Pt.X, Pt.Y, CRS_WGS84) = " & CStr(Pt.X)
If pt.IsValid = False Then
MsgBox "Ошибка преобразования"
End If
'Записываем широту и долготу в соответствующие поля ("X" и "Y")
Db.UpdateBaseRecord Keys.Item(i), "x" + CHR(10) + "y", CStr(Pt.X) + CHR(10) + CStr(Pt.Y), 0
End If
Next
MsgBox "Обновлено записей"
End Sub
Код работает. Имел в виду чтение координат с локальной системы в метрах, отрисованной самостоятельно или с помощью стандартных инструментов: https://ibb.co/wpRjGjK https://ibb.co/HxKvCHb
написал: [CODE][/CODE]Имел в виду чтение координат с локальной системы в метрах, отрисованной самостоятельно или с помощью стандартных инструментов: https://ibb.co/wpRjGjK https://ibb.co/HxKvCHb
Set Ptlocal = El.CalcDistance(Element(ID линии координатной оси), 0)
? Как это написать
Код
Ptlocalattributes = Element(ID линии координатной оси), 0
'По всем объектам слоя
For i = 1 To Keys.Count
Set El = L.Elements.getElement(Keys.Item(i))
'Если объект примитив
If El.TypeID = 3 Then
'Получаем расстояние до линии координатной оси
Set Ptlocal = El.CalcDistance(Keys.Item(i), ???Ptlocalattributes???)
CalcDistance возвращает double, а не объект. Зачем Set? Просто расстояние между двумя Element
Set El = L.Elements.getElement(Keys.Item(i)) Set El1 = L.Elements.getElement(ID линии координатной оси) 'Или из из другого слоя, смотря в каком слое ось нарисована