| Обсуждение |
| Импорт растров через COM [ Вадим Протасов ]Среда, 19 июня 2013, 10:25
Добрый день. Есть следующая задача. В OL загружаются растры разных размеров: большой (планшет), а потом на него со временем накладываются мелкие растры для того, чтобы информация на планшете оставалась актуальной. Во внешнем приложении мне нужно получить актуальный планшет со всеми наложенными на него растрами. В примерах не нашел подобного |
|
| [ Вадим Протасов ]Четверг, 20 июня 2013, 16:51
у меня есть идентификатор планшета, при желании можно получить идентификаторы маленьких изображений. Можно ли каким-либо образом вытащить растры из ГБД? |
|
| [ ObjectLand Support ]Понедельник, 24 июня 2013, 11:13
Вы можете получить объект Feature по идентификатору, а у него есть метод GetImage (http://www.objectland.ru/support/doc/comapi/Geometry_GetImage.html), который и вернет растр. |
|
| [ Вадим Протасов ]Среда, 26 июня 2013, 13:19
Остался вопрос: как получить геометрию по идентификатору? Пока что получилось только открыв GDBThemeBrowser и выделив геометрию с нужным идентификатором взять GDBThemeBrowser.Featureset.Feature. Можно ли получить Feature без открытия окна темы? |
|
| [ ObjectLand Support ]Среда, 26 июня 2013, 14:48
Обратите внимание на свойство Bookmark объекта Featureset (http://www.objectland.ru/support/doc/comapi/Geoset_Bookmark.html).
Вот пример кода получения геометрии с номером 6 на VB:
objFeatureset = objMap.Layers.Item(LAYER_NAME).OpenFeatureset
objFeatureset.Bookmark = 6 'внутренний номер
objFeature = objFeatureset.Feature
Еще один пример на VB, который может оказать Вам полезным и возможно откроет новые возможности использования СОМ-модели ГИС ObjectLand:
' Функция GetFeatureByAttribute находит геометрию с заданными атрибутами и возвращает ее номер.
' Параметры для функции м.б. например такими:
' TableName = "Таблица с кварталами"
' FieldName = "GID"
' FieldValue = "{255E4A26-1C26-4FEC-828C-89076790BCD0}"
' ThemeName = "Квартал 01 02 38"
' LayerName = "Кварталы"
Public Function GetFeatureByAttribute(ByVal TableName As String, ByVal FieldName As String, ByVal FieldValue As String, ByVal ThemeName As String, ByVal LayerName As String) As Integer
Dim aQuery As GDBQuery
Dim aField As GDBField
Dim aSearchCondition As GDBFieldSearchCondition
Dim aRecordset As GDBRecordset
GetFeatureByAttribute = 0
' Строим выборку на основе заданной таблицы <TableName>.
' Путем задания критерия поиска в созданной выборке,
' находим набор записей таблицы поле <FieldName> которых содержит значение <FieldValue>.
' Далее работаем с первой записью набора.
aQuery = GeoDatabase.CreateQuery(GeoDatabase.Tables.Item(TableName))
aField = aQuery.Fields.Item(FieldName)
aSearchCondition = aField.CreateSearchCondition(GdbLogicalOps.gdbLogicalNone, GdbQueryRelations.gdbQueryRelEQ, FieldValue, "")
aQuery.FieldSearchConditions.Append(aSearchCondition)
aRecordset = aQuery.OpenRecordset
If (aRecordset.RecordCount = 0) Then Exit Function
aRecordset.MoveFirst()
Dim aLayer As GDBLayer
Dim bFeatureFound As Boolean = False
' Перебираем типы слоя <LayerName> до тех пор, пока набор геометрий для текущей записи набора записей
' будет не пустым. Возвращаем первую геометрию набора.
aLayer = GeoDatabase.Themes.Item(ThemeName).Layers.Item(LayerName)
For i As Integer = 1 To aLayer.FeatureTypes.Count
Dim aFeatureset As GDBFeatureset = Nothing
' Если тип не связан с таблицей на основе которой построен набор записей, то
' возникает исключение!
Try
aFeatureset = aRecordset.OpenFeatureset(aLayer.FeatureTypes.Item(i), GdbScopeTypes.gdbScopeCurrentRecord)
Catch e As COMException
If (e.ErrorCode And &HFFFF) <> 4034 Then Throw
End Try
If (aFeatureset IsNot Nothing) Then
If (aFeatureset.FeatureCount > 0) Then
bFeatureFound = True
aFeatureset.MoveFirst()
GetFeatureByAttribute = aFeatureset.Feature.Number
End If
aFeatureset.Close()
End If
If bFeatureFound Then Exit For
Next
aRecordset.Close()
End Function |
|
| [ Вадим Протасов ]Пятница, 5 июля 2013, 14:38
Вроде разобрался. Спасибо за информацию |
|
ОтветитьЗнаком «*» отмечены обязательные для заполнения поля. |
| |