Официальный сайт геоинформационной системы (ГИС) ObjectLandОфициальный сайт геоинформационной системы (ГИС) ObjectLand
  
 
ПОИСК ПО САЙТУ:
yandex.ru
КАРТА САЙТА
 
главная / поддержка / форум
E-MAIL:ПАРОЛЬ: 
регистрация

Обсуждение

 COM Экспорт в другие форматыCOM Экспорт в другие форматы [ Жиров Андрей ]
Среда, 2 августа 2006, 12:26

В COM интерфейсе есть объект для экспорта GDBMapExporter, но некоторые заявленные в нем функции, например SetWindow
выдают в VB ошибку на этапе компиляции:
Expected Function or variable

вот пример строки выдающей такую ошибку
objMapExporter.SetWindow(0, 0, 40000, 40000, 0)

Возможно ли вообще с помощью COM интерфейса экспортировать данные в другие форматы?

 COM Экспорт в другие форматы [ ObjectLand Support ]
Среда, 2 августа 2006, 14:18

Проверили в версии 2.6.5 - этот код работает. Возможно Вы используете более старую версию ObjectLand. Мы можем выслать Вам набор vbs-скриптов, которые иллюстрируют работу по экспорту/импорту с разными обменными форматами.

 COM Экспорт в другие форматы [ Жиров Андрей ]
Среда, 2 августа 2006, 15:12

Был бы признателен за набор скриптов.
У меня версия версия 2.6.4
Версию можно как-то обновить?
Извините случайно создал такую же тему при обновлении страницы.

 COM Экспорт в другие форматы [ ObjectLand Support ]
Среда, 2 августа 2006, 15:38

Некоммерческую версию 2.6.5 можно скачать с нашего сайта. Коммерческая версия доступна для скачивания с сайта только коммерческим пользователям. Скрипты высылаем.

 COM Экспорт в другие форматы [ Жиров Андрей ]
Среда, 2 августа 2006, 15:58

К сожалению скрипты пока не пришли.

 COM Экспорт в другие форматы [ Жиров Андрей ]
Среда, 2 августа 2006, 16:21

Спасибо! Данные получил.

 COM Экспорт в другие форматы [ Жиров Андрей ]
Пятница, 4 августа 2006, 16:34

В таком виде:
objMapExporter.SetWindow 0, 0, 40000, 40000, 0
заработало

Еще вопросик, реально ли выгрузить в MIF формат данные из приконнекченых таблиц?
Вроде бы в примере подтягиваются поля таблицы,я подтянул все поля всех линкованных таблиц, но на выходе как было два поля так и осталось

Set aFeatureType = objLayer.FeatureTypes.Item(j)
Set aMapping = objMapExporter.CreateFeatureTypeMapping(aFeatureType)

For k = 1 To aFeatureType.DataLinks.Count
Set aTable = objGDB.Tables(aFeatureType.DataLinks.Item(k).Table.Name)
aMapping.LinkedTable = aTable.Clone
For l = 1 To aTable.Fields.Count
Set aField = aTable.Fields.Item(l)
Set aFieldMapping = aMapping.CreateFieldMapping(aField)
aMapping.FieldMappings.Append aFieldMapping
Next l
Next k
objMapExporter.FeatureTypeMappings.Append aMapping

 COM Экспорт в другие форматы [ Максим Юрьевич Трухачёв ]
Пятница, 4 августа 2006, 18:11

Андрей, ошибка, которую ты описывал в самом первом сообщении, связана с тем, что ты записал вызов метода как функции (со скобками), а надо было - как в твоём последнем сообщении, без скобок (это соответствует вызову метода как ПРОЦЕДУРЫ). В VB(A) методы могут вызываться двояко - и как процедуры, и как ф-ии.

 COM Экспорт в другие форматы [ [ ObjectLand Support ] ]
Пятница, 4 августа 2006, 18:25

Выгрузить, конечно, возможность есть.

>>на выходе как было два поля так и осталось

Какие два поля? Те же что и в примере? А может там всего одна прилинкованная таблица с двумя полями?

Если я правильно понял Вашу проблему, то смысл такой: FeatureType.DataLinks содержит коллекцию как внутренних таблиц, так и внешних. А на сегодняшний день возможен экспорт только внутренних таблиц ObjectLand.

aFeatureType.DataLinks.Item(k).Table в случае внешней таблицы возвратит null.

P.S.
Вместо
Set aTable = objGDB.Tables(aFeatureType.DataLinks.Item(k).Table.Name)
и
aMapping.LinkedTable = aTable.Clone

достаточно сделать так:

Set aTable = aFeatureType.DataLinks.Item(k).Table
и
aMapping.LinkedTable = аTable

 COM Экспорт в другие форматы [ Жиров Андрей ]
Понедельник, 7 августа 2006, 11:56

Два поля - это LayerID Integer и ObjectID Integer
На счет прилинкованных таблиц скрипт выдает:
MDKK System Table
MAPID Integer
GID String
ONT Integer
KN String
MTs String
STATUS Integer
KNID Integer
System Table: LinkKN2Object
gid Integer
Все таблицы находятся внутри базы
aFeatureType.DataLinks.Item(k).Table null не выдает
Ниже привожу скрипт целиком. Проблемные места помечены множественными восклицательными знаками '!!!!!!


Private Sub Main()
Dim objGDBEngine As IGDBEngine ' Ядро ObjectLand.
Dim objGDB As IGDBGeoDatabase ' ГБД.
Dim objMaps As GDBMaps
Dim objMap As GDBMap
Dim objLayers As GDBLayers
Dim objLayer As GDBLayer
Dim objMapExporter As GDBMapExporter
Dim i, j, k, l, aFeatureTypeCount, aLayersCount As Integer
Dim aFilePath, aReportPath As String
Dim rez, X, Y, aHeight, aWidth, anAngle As Integer
Dim aMapping As GDBFeatureTypeMapping
Dim aField As GDBField
Dim aTable As GDBTable
Dim aTables() As GDBTable
Dim aFieldMapping As GDBFieldMapping
Dim GDB_NAME, aGdbPath, aMapName, anExportLayerName, aMIFMapUnits As String
Dim aWindowCenterX, aWindowCenterY, aWindowWidth, aWindowHeight, aWindowAngle As Integer

Dim msg As String



aGdbPath = "D:\Work\EGRZ\SQLBase\vladimir\" 'путь к файлу ГБД
GDB_NAME = "Владимир" ' Имя файла ГБД.
aMapName = "Город" 'Имя карты
aFilePath = "c:\temp\0014\" 'путь для конечных файлов
anExportLayerName = "Земельные участки" 'из этого слоя объекты каждого типа будут экспортироваться в отдельный файл
aMIFMapUnits = "m" 'единицы карты
'окно экспорта
aWindowCenterX = 0
aWindowCenterY = 0
aWindowWidth = 40000
aWindowHeight = 40000
aWindowAngle = 0

' Установка обработчика ошибок.
On Error GoTo PROC_ERROR

Dim strGDBPath As String ' Путь и имя файла ГБД.
' Установка имени и пути к ГБД.
strGDBPath = aGdbPath & GDB_NAME

' Создание ядра ObjectLand.
Set objGDBEngine = New GDBEngine

' Открытие ГБД с именем, определенным переменной strGDBPath,
' и атрибутами "Монопольно", "Чтение/Запись", "Без файла изменений".
Set objGDB = objGDBEngine.OpenGDB(strGDBPath, gdbOpenExclusive Or gdbOpenReadWrite _
Or gdbOpenNoChgFile, "", "", "")

' Вывод результата работы скрипта.
Debug.Print "ГБД успешно открыта."
Set objMaps = objGDB.Maps
Debug.Print objMaps.Count
Set objMap = objMaps.Item(1)
Debug.Print objMap.Name
Set objMapExporter = objGDBEngine.CreateMapExporter(objMap, gdbIeMapFormatMIF, aFilePath)
objMapExporter.MIFExportLayerAsSingleFile = False
objMapExporter.MIFMapUnits = aMIFMapUnits
objMapExporter.SetWindow aWindowCenterX, aWindowCenterY, aWindowWidth, aWindowHeight, aWindowAngle

Set objLayers = objMap.Layers
aLayersCount = objLayers.Count
Debug.Print aLayersCount
For i = 1 To aLayersCount
Set objLayer = objLayers.Item(i)
aFeatureTypeCount = objLayer.FeatureTypes.Count
Debug.Print objLayer.Name & " " & aFeatureTypeCount
If (objLayer.Name = anExportLayerName) Then
For j = 1 To aFeatureTypeCount
Dim aFeatureType As GDBFeatureType
Set aFeatureType = objLayer.FeatureTypes.Item(j)
Set aMapping = objMapExporter.CreateFeatureTypeMapping(aFeatureType)
ReDim aTables(aFeatureType.DataLinks.Count)
For k = 1 To aFeatureType.DataLinks.Count
Debug.Print " " & aFeatureType.DataLinks.Item(k).Table.Name
Set aTables(k) = aFeatureType.DataLinks.Item(k).Table
'!!!!!!!!! Если к следущей строке добавить .Clone то скрипт работает
'без ошибок, но данные из таблиц не экспортируются
'Если оставить как есть, то на этапе экспорта вылетает ошибка
'ошибка: Ошибка средства импорта-экспорта
'причем, если привязанных таблиц нет, то скрипт срабатывает
aMapping.LinkedTable = aTables(k)
For l = 1 To aTables(k).Fields.Count
Debug.Print " " & aTables(k).Fields.Item(l).Name
Debug.Print " " & aTables(k).Fields.Item(l).TypeName
Set aField = aTables(k).Fields.Item(l)
'!!!!!!!! Нужно ли при маппировании полей все-таки указывать все
'необязательные параметры?
Set aFieldMapping = aMapping.CreateFieldMapping(aField, aField.Name)
aMapping.FieldMappings.Append aFieldMapping
Next l
Next k

objMapExporter.FeatureTypeMappings.Append aMapping
objMapExporter.FilePath = aFilePath & aFeatureType.Name & ".mif"
aReportPath = aFilePath & aFeatureType.Name & ".txt"
anInfo objMapExporter

objMapExporter.Export aReportPath
objMapExporter.FeatureTypeMappings.Delete (1)
Next j
End If
Next i

Debug.Print objMapExporter.Check


' Закрытие ГБД.
objGDBEngine.Close

' Освобождение ядра ObjectLand.
Set objGDBEngine = Nothing

' Завершение программы.
Exit Sub

' Выдача сообщения об ошибке.
PROC_ERROR:
MsgBox Err.Description

End Sub

Sub anInfo(objMapExporter)
msg = ""
msg = msg & "Map: " & objMapExporter.Map.Name & Chr(13)
msg = msg & "FilePath: " & objMapExporter.FilePath & Chr(13)
msg = msg & "FileFormat: " & objMapExporter.FileFormat & Chr(13)
msg = msg & "MIFLayerAsSingleFile: " & objMapExporter.MIFExportLayerAsSingleFile & Chr(13)
msg = msg & "MIFMapUnits: " & objMapExporter.MIFMapUnits & Chr(13)
objMapExporter.GetWindow X, Y, w, h, a
msg = msg & "Window: " & X & ", " & Y & ", " & w & ", " & h & ", " & a & ", " & Chr(13)
msg = msg & Chr(13)
msg = msg & "FeatureType Mappings (GeometryType, FeatureType)" & Chr(13)
msg = msg & "--------------------------------------" & Chr(13)
For Each mapping In objMapExporter.FeatureTypeMappings
msg = msg & mapping.Number & " - "
msg = msg & mapping.GeometryType & ", "
msg = msg & mapping.FeatureType.Name
msg = msg & Chr(13)
msg = msg & "Поля данных" & Chr(13)
For Each aFieldMapping In mapping.FieldMappings
msg = msg & "Имя поля " & aFieldMapping.Field.Name & _
" Имя " & aFieldMapping.Name _
& " номер типа " & aFieldMapping.DataType _
& " Длинна " & aFieldMapping.Length _
& " десятчных " & aFieldMapping.DecimalCount _
& Chr(13)
Next
Next
'for each aFieldMapping in objMapExporter.F
MsgBox msg, , "Параметры операции"
End Sub

 COM Экспорт в другие форматы [ ObjectLand Support ]
Понедельник, 7 августа 2006, 15:40

Спецификация MIF формата накладывает некоторые ограничения на хранение графической информации и связанными с ней данными.
<---
С каждым графическим объектом MIF-файла может быть связана запись MID-файла, содержащая атрибутивную информацию об этом объекте. Эту запись можно использовать для экспорта значений полей таблицы, связанной с объектами данного типа. Если тип объектов связан с несколькими таблицами, то при экспорте придется выбрать только одну из них.
---> (Справка ГИС ObjectLand\Импорт и экспорт данных)

>>Нужно ли при маппировании полей все-таки указывать все необязательные параметры?

Необязательные параметры можно и не указывать. Но есть необходимые параметры, например, длина строкового типа поля, которую Вы не указываете.

 COM Экспорт в другие форматы [ Жиров Андрей ]
Вторник, 8 августа 2006, 12:03

Выяснилась следующая вещь:
при мапировании полей
Set aFieldMapping = aMapping.CreateFieldMapping(aField, aField.Name, aMaxFieldLength, aPrecision)
нельзя указывать третий параметр больще чем двадцать
т.е я не могу экспортировать строковые поля длинней чем 20 символов - экспортер при этом отказывается делать экспорт
Чем обусловлено данное ограничение?

 COM Экспорт в другие форматы [ ObjectLand Support ]
Вторник, 8 августа 2006, 12:48

Вы, наверное, перепутали. Не строковые поля, а целочисленные или вещественные. Количество позиций в символьном представлении значения для строковых полей ограничивается 254мя, а вот для целочисленных или вещественных действительно двадцатью символами.

 COM Экспорт в другие форматы [ Жиров Андрей ]
Вторник, 8 августа 2006, 13:40

Спасибо за помошь. Вы правы.
Похоже теперь с экспортом разобрался.

 COM Экспорт в другие форматы [ Константин ]
Четверг, 28 сентября 2006, 15:21

Решаю задачку для экспорта объектов из множества баз. Можно получить набор vbs-скриптов, которые иллюстрируют работу по экспорту?

 COM Экспорт в другие форматы [ Константин ]
Четверг, 28 сентября 2006, 15:44

Пытаюсь создать объект для экспорта и получаю ошибку:
GDB открыта
Method 'CreateMapExporter' of object 'IGDBEngine' failed
С чем может быть связано?

P.S. For Each objGDBMap In objGDB.Maps

Set objMapExporter =ojGDBEngine.CreateMapExporter(objGDBMap, gdbIeMapFormatMIF, "E:\")

 COM Экспорт в другие форматы [ ObjectLand Support ]
Четверг, 28 сентября 2006, 15:45

Примеры Вам высланы.

 COM Экспорт в другие форматы [ Константин ]
Четверг, 28 сентября 2006, 15:45

С пред. проблемой разобрался

 COM Экспорт в другие форматы [ Константин ]
Четверг, 28 сентября 2006, 15:46

спасибо

 COM Экспорт в другие форматы [ Юрий ]
Вторник, 4 сентября 2007, 16:48

Господа, у нас официальная версия 2.6.6
(МУП "ГЦКиГ", г.Ростов-на-Дону).
Можете ли выслать vbs-скрипты, которые иллюстрируют работу по экспорту/импорту с форматом MID-MIF?
И еще: Что нужно, чтобы эта штука заработала с DELPHI-6?

 COM Экспорт в другие форматы [ Objectland Support ]
Вторник, 4 сентября 2007, 17:15

Примеры Вам высланы.

 COM Экспорт в другие форматы [ Николай ]
Пятница, 7 сентября 2007, 10:43

Примеры получили все чудно работает.
Где найти доку по этому MapExporter
или подскажите пожайлуста где подрихтовать код (фрагмент ниже) чтобы экспортировались все записи таблицы связанные с графикой а не первая...

Спасибо.

Set map = gdb.Maps("Земельные участки на карте М:1:2000")
Set exporter = engine.CreateMapExporter(map, gdbIeMapFormatMIF, filePath)

exporter.MIFExportLayerAsSingleFile = false
exporter.MIFMapUnits = "m"

Set featureType = map.Layers("Земельные участки").FeatureTypes("Аренда")
Set mapping = exporter.CreateFeatureTypeMapping(featureType)

Set table = gdb.Tables("Межевание земель")
mapping.LinkedTable = table
mapping.FieldMappings.Append mapping.CreateFieldMapping(table.Fields("КН 61:44:0"), "kn", 15)

mapping.FieldMappings.Append mapping.CreateFieldMapping(table.Fields("Номер межевания (формирования)"), "ndel", 10)

exporter.FeatureTypeMappings.Append mapping

exporter.Export reportPath

 COM Экспорт в другие форматы [ Objectland Support ]
Пятница, 7 сентября 2007, 14:46

Для экспорта всех записей таблиц, связанных с экспортируемыми объектами, необходимо установить свойство ExportAllLinkedRecords объекта mapping в true (до его добавления в коллекцию exporter.FeatureTypeMappings):

...
mapping.ExportAllLinkedRecords = true
...
exporter.FeatureTypeMappings.Append mapping
...

Для экспорта первой найденной присоединенной записи устанавливайте mapping.ExportAllLinkedRecords в false.


 Нужна документация по интерфейсам import-exportНужна документация по интерфейсам import-export [ Максим Юрьевич Трухачёв ]
Пятница, 7 сентября 2007, 21:05

Уважаемые разработчики, выложите, пожалуйста, временно где-нибудь (например, в разделе "ссылки") ПОЛНУЮ документацию по COM-интерфейсам импорта-экспорта хотя бы в "сыром" (текстовом, не html) виде, потому что примеры кода (которые вам приходится каждый раз высылать по почте) не могут в принципе охватить всё многообразие вариантов использования этих интерфейсов.
Заранее спасибо.

 COM Экспорт в другие форматыCOM Экспорт в другие форматы [ Николай ]
Понедельник, 10 сентября 2007, 10:29

Спасибо работает вроде то что нужно. И присоединяюсь к просьбе насчет документации.

 COM Экспорт в другие форматы [ Objectland Support ]
Понедельник, 10 сентября 2007, 14:06

Документация будет доступна в ближайшее время.

Ответить

Знаком «*» отмечены обязательные для заполнения поля.
Ваше имя:  *
Адрес электронной почты:  
Тема:  *
Сообщение:
 *
Подтверждение:
(не требуется для зарегистрированных пользователей)
 *
 



Copyright © 1999–2022 ГИС ObjectLand
ГИС ObjectLand ® ООО «Радом-АйТи»
Информация о лицензировании
главная | о продукте | скачать | купить | поддержка | новости