Access

0 голосов
спросил 23 Янв, 08 от Serg_Sh (240 баллов) в категории Программные продукты Esri

Подскажите........

Каким образом можно обеспечить выбор пространственных данных непосредственно из базы Access

21 Ответы

0 голосов
ответил 15 Сен, 08 от AndreyL (5,420 баллов)
Интересно, вроде вчера ответил, а поста нет.
Да реплика была простая: что у Вас вызывает проблему? Программная подгрузка слоя? Дык в справке пример есть, смотрите Sample VBA code
0 голосов
ответил 15 Сен, 08 от mant (760 баллов)
Да, проблему вызывает именно програмная подгрузка слоя.
Минимум: как прописывается путь к слою, кот находится внутри бгд.
Я нашел указанный Вами пример по подгрузке слоя, но к сожалению у меня не хватило знаний по ВБА для объединения примера с гиперлинком.
Если у Вас есть время описать это - прочитаю с удовольствием.
0 голосов
ответил 15 Сен, 08 от AndreyL (5,420 баллов)
Сама база большая? Киньте в личку, чтобы на Вашей базе сделать. Если большая, то для примера подготовьте сокращенный вариант.
0 голосов
ответил 15 Сен, 08 от AndreyL (5,420 баллов)
На самом деле вот работающий пример:
 
Sub Hyperlink(pLink, ppLayer)

  Dim pHyperlink As IHyperlink
  Set pHyperlink = pLink
  'MsgBox pHyperlink.Link
 
Dim pFact As IWorkspaceFactory
Dim pWorkspace As IWorkspace
Set pFact = New AccessWorkspaceFactory
Set pWorkspace = pFact.OpenFromFile("D:\MyDB.mdb", 0)
Dim pFeatureWorkspace As IFeatureWorkspace
Set pFeatureWorkspace = pWorkspace
Dim pFeatureClass As IFeatureClass
Dim lName As String
lName = pHyperlink.Link
Set pFeatureClass = pFeatureWorkspace.OpenFeatureClass(lName)
Dim pLayer As IFeatureLayer
Set pLayer = New FeatureLayer
Set pLayer.FeatureClass = pFeatureClass
pLayer.Name = pFeatureClass.AliasName
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
pMxDoc.AddLayer pLayer
pMxDoc.ActiveView.PartialRefresh esriViewGeography, pLayer, Nothing
End Sub
 
За час из примеров справки сваял, так что написано как попало, но понять можно.
0 голосов
ответил 15 Сен, 08 от mant (760 баллов)
сама база данных небольшая: 36 слоев уровня грунт вод, 36 растров к ним, 3 атр таблицы и один слой по всем нас пунктам.
Так что скрипт вроде должен удачно подойти. разве что есть вариант автоматического зуммирования на слой? аналог "zoom to layer" при загрузке
0 голосов
ответил 15 Сен, 08 от AndreyL (5,420 баллов)
сама база данных небольшая: 36 слоев уровня грунт вод, 36 растров к ним, 3 атр таблицы и один слой по всем нас пунктам.
Так что скрипт вроде должен удачно подойти.
 
Вот и славненько, дерзайте
разве что есть вариант автоматического зуммирования на слой? аналог "zoom to layer" при загрузке
Дык а последняя строка этого скрипта именно тем и занимается
0 голосов
ответил 15 Сен, 08 от mant (760 баллов)
хммм, при подгрузке слоя по гиперссылке у меня остался прежний экстент. соответственно пришлось воспользоваться "zoom to layer" для перехода на новый слой
0 голосов
ответил 15 Сен, 08 от AndreyL (5,420 баллов)

А, да, я же подгружал слой в пустой проект. Там, похоже, в последней строке вместо Nothing параметру envelope  нужно присвоить соответствующий  IEnvelope, для начала его проинициализировать (см. справку по IEnvelope и PartialRefresh)

0 голосов
ответил 15 Сен, 08 от mant (760 баллов)
угу, благодарю, сейчас посмотрю.

а параллельный вопрос: можно ли делать мультилинки? т.е. чтобы несколько полей определить как линки и по клику выбирать?
0 голосов
ответил 15 Сен, 08 от AndreyL (5,420 баллов)
можно ли делать мультилинки? т.е. чтобы несколько полей определить как линки и по клику выбирать?
По моему, нет - там при определении хотлинка сразу надо поле указать, и только одно. Иначе собственный струмент писать надо.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...