добавление FeatureClass

0 голосов
спросил 24 Март, 06 от Гость (210,080 баллов) в категории Программные продукты Esri

Здравствуйте уважаемые форумчане!

Я только учусь программировать в VB. Столкнулась с проблемой добавления FeatureClass из FeatureDataset базы геоданных в открытый ArcMap. imageОбычное OpenFromFile не подходит, это же все-таки БГД.

Помогите, пожалуйста, люди добрые.

Заранее огромное спасибо!!!

23 Ответы

0 голосов
ответил 24 Март, 06 от filippov70 (5,320 баллов)

Через метод OpenFeatureClass
0 голосов
ответил 24 Март, 06 от filippov70 (5,320 баллов)

Public Sub AddFeatureClass()
  Dim pWorkspaceFactory As IWorkspaceFactory
  Dim pFeatureWorkspace As IFeatureWorkspace
  Dim pFC As IFeatureClass
  Dim pFeatureLayer As IFeatureLayer
  Dim pMxDocument As IMxDocument
  Dim pMap As IMap
   
  Set pWorkspaceFactory = New AccessWorkspaceFactory
  Set pFeatureWorkspace = openAccessWorkspace("d:\test.mdb")
 
  Set pFeatureLayer = New FeatureLayer
  Set pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass("qwe")
  pFeatureLayer.name = pFeatureLayer.FeatureClass.AliasName
  Set pMxDocument = Application.Document
  Set pMap = pMxDocument.FocusMap
  pMap.AddLayer pFeatureLayer
End Sub

Сдесь я сделал пример без датасета. Фичакласс лежит в test.mdb

Пробуй
0 голосов
ответил 24 Март, 06 от Гость (210,080 баллов)

Спасибо, добрый человек!

У меня не получаетсяimage

выдает ошибку: Sub or function not defined.

Что делать?

0 голосов
ответил 24 Март, 06 от Гость (210,080 баллов)

Вот так у меня работает терь: 

Sub mymacro()
  Dim pWorkspaceFactory As IWorkspaceFactory
  Dim pFeatureWorkspace As IFeatureWorkspace
  Dim pFC As IFeatureClass
  Dim pFeatureLayer As IFeatureLayer
  Dim pMxDocument As IMxDocument
  Dim pMap As IMap
  Dim pPropset As IPropertySet
  Set pPropset = New PropertySet

  Dim pFact As IWorkspaceFactory
  Dim pWorkspace As IWorkspace

  pPropset.SetProperty "DATABASE", "d:\test.mdb"

  Set pFact = New AccessWorkspaceFactory
  Set pWorkspace = pFact.Open(pPropset, 0)

  Set pFeatureWorkspace = pWorkspace

  Dim pFeatureClass As IFeatureClass
  Set pFeatureClass = pFeatureWorkspace.OpenFeatureClass("qwe")
  Set pFeatureLayer = New FeatureLayer
  Set pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass("qwe")
  pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName
  Set pMxDocument = Application.Document
  Set pMap = pMxDocument.FocusMap
  pMap.AddLayer pFeatureLayer

End Sub

 

Тока я не знаю теперь как из датасета  featureclass в мап закинуть image

0 голосов
ответил 27 Март, 06 от filippov70 (5,320 баллов)
Ругается на функцию openAccessWorkspace.
Я не стал ее описывать. т.к. Workspace у вас был.
Проблема была в AddLayer.

Если работает это гудimage
0 голосов
ответил 27 Март, 06 от Гость (210,080 баллов)

А что с датасетом? У меня все еще не получается.

Может быть подскажите?image

0 голосов
ответил 28 Март, 06 от filippov70 (5,320 баллов)
Вот

Public Function openAccessWorkspace(connString As String) As IWorkspace

On Error GoTo EH
 
  Dim pWS As IWorkspace
  Dim pWorkspaceFactory As IWorkspaceFactory
 
  Set openAccessWorkspace = Nothing
 
  Set pWorkspaceFactory = New AccessWorkspaceFactory
  Set pWS = pWorkspaceFactory.OpenFromFile(connString, 0)
  Set openAccessWorkspace = pWS
 
  Exit Function
EH:
    MsgBox Err.Description, vbInformation, "openAccessWorkspace"
End Function
0 голосов
ответил 28 Март, 06 от Гость (210,080 баллов)
Ограмное Спасибо за то, что помогаете!!!

У меня опять на openAccessWorkspace ругается.
Я уже ничего не понимаюimage
0 голосов
ответил 28 Март, 06 от Гость (210,080 баллов)
Вот так получается!

Sub getFeatureClass()
 
  Dim pWorkspaceFactory As IWorkspaceFactory
  Dim pFeatWorkspace As IFeatureWorkspace
  Dim pFeatLayer As IFeatureLayer
  Dim pMxDocument As IMxDocument
  Dim pMap As IMap
 
  Set pWorkspaceFactory = New AccessWorkspaceFactory
  Set pFeatWorkspace = pWorkspaceFactory.OpenFromFile("D:\test.mdb", 0)

  Set pFeatLayer = New FeatureLayer
  Set pFeatLayer.FeatureClass = pFeatWorkspace.OpenFeatureClass("qwe")
  pFeatLayer.Name = pFeatLayer.FeatureClass.AliasName
 
  Set pMxDocument = Application.Document
  Set pMap = pMxDocument.FocusMap
  pMap.AddLayer pFeatLayer

End Sub


Для меня конечно странно что именно так работает, что именно из датасета берет featureClass (хотя имя датасета не указывается) и добавляет в мап.
Но работает же!!! Ура!!!image
Спасибо вам большое!!! Вы просто Волшебник!!!image



А как сделать так, чтоб путь и названия датасетов, бгд, и т.д. указывался не программно, а чтоб задавался пользователем в процессе нажимания всяких кнопочек на форме? (надеюсь понятно спросилаimage)
0 голосов
ответил 28 Март, 06 от Гость (210,080 баллов)
Брать название из текстбоксов на форме
типа

geobase = frmCustom.textbox1.text - что-то типа ентого вставить на событие элемента фомы Click

я использую ini-файлы

при загрузке приложения в форму из иника грузаца фсякие феньки (имя пользователя, пареметры коннекта и тп.)
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...