HELP !!!

0 голосов
спросил 12 Март, 08 от ldokov (580 баллов) в категории Программные продукты Esri

Здравствуйте !

 

Народ, может быть кто-нибудь, подскажет написание кода на VBA для следующей процедуры.

Есть база геобазаданных из нескольких слоев (точки, линии, полигоны). У всех слоев присутствует поле ID.

Необходимо, написать процедуру, после выполнения которой, на карте видимыми остались бы объекты, только с каким-то конкретным ID .

Заранее благодарен !!!

5 Ответы

0 голосов
ответил 12 Март, 08 от new_sergei (2,660 баллов)

Здравствуйте !

 

Народ, может быть кто-нибудь, подскажет написание кода на VBA для следующей процедуры.

Есть база геобазаданных из нескольких слоев (точки, линии, полигоны). У всех слоев присутствует поле ID.

Необходимо, написать процедуру, после выполнения которой, на карте видимыми остались бы объекты, только с каким-то конкретным ID .

Заранее благодарен !!!

 
Прежде чем писать скрипт, необходимо узнать как это можно сделать (если вообще возможно) штатными средствами. Я на вскидку ничего подобного не вижу.
Как я себе представляю решение: надо будет создавать новые слои по запросам и добавлять их к карте, при этом отключать первоначальные слои. Писать, конечно, надо будет много, но, думаю, что проблем возникнуть не должно.
0 голосов
ответил 12 Март, 08 от ldokov (580 баллов)
Новые слои создавать не надо, надо брать слои из геобазы данных и отключать объекты, по принципу запроса в свойствах слоя Layer Properties --> Definition Query --> Query Builder, только с помощью скрипта
0 голосов
ответил 13 Март, 08 от Ivan (660 баллов)
Пример проставляет Definition для всех слоев - скорректируйте строку ограничения(definition) по необходимости 
 
Public Sub SetDefinition()
Dim pMxDoc As IMxDocument
Dim pMap As IMap
Dim definition As String
Dim pFlayer As IFeatureLayer
Dim pLayerDef As IFeatureLayerDefinition
Dim fld As String
Dim i As Integer

fld = "ID" 
idvalue = 15
definition = fld & " = " & idvalue

Set pMxDoc = Application.Document
Set pMap = pMxDoc.FocusMap

i = 0
While i < pMap.LayerCount

    Set pFlayer = pMap.Layer(i)
    Set pLayerDef = pFlayer
    pLayerDef.DefinitionExpression = definition
    Set pFlayer = pLayerDef

    i = i + 1
Wend
MsgBox "DEFINITION SET : " & definition
End Sub

0 голосов
ответил 13 Март, 08 от ldokov (580 баллов)
Постоянно выдает ошибку Run-Time error 13 - Type mismatch, в строке Set pFlayer = pMap.Layer(i)
0 голосов
ответил 13 Март, 08 от Ivan (660 баллов)

Попробуйте поставьте i=1. Проверьте наличие слоев в документе ArcMap. У меня работает (ArcGIS 9.2 4 SP)

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