Запрос элементов карты как в SQL

0 голосов
спросил 16 Май, 10 от sandra (240 баллов) в категории Программные продукты Esri
Здравствуйте! подскажите плиз как сделать в ВБ2005 окно с запросом по открытой карте?

9 Ответы

0 голосов
ответил 16 Май, 10 от TDenis (42,620 баллов)
Что ещё за окно с запросом по открытой карте?
0 голосов
ответил 16 Май, 10 от sandra (240 баллов)
я написала приложение на вб в котором есть инструменты навигации. теперь мне нужно по открытому слою сделать выборку по определенным требованиям
0 голосов
ответил 16 Май, 10 от TDenis (42,620 баллов)
Если просто получить объекты, то с помощью:
IFeatureLayer.Search
Если надо выделить, то с помощью:
IFeatureSelection.SelectFeatures
И там и тут требуется IQueryFilter, которому вы и укажете свой SQL.
0 голосов
ответил 23 Май, 10 от Commrad1 (3,660 баллов)
  Sub Select
Dim pFeatSel As IFeatureSelection
  Dim pQF As IQueryFilter
 
  Set pFeatSel = FindLayer("Название слоя")
 
  ' set up query filter with where clause
  Set pQF = New QueryFilter
  pQF.WhereClause = "SQL запрос типа 'AREA > 1000' "
  
  ' perform selection
  pFeatSel.SelectFeatures pQF, esriSelectionResultNew, False
  pFeatSel.SelectionChanged
MapControl1.ActiveView.PartialRefresh esriViewGeography, Nothing, Nothing
MapControl1.Refresh
end sub
 
Public Function FindLayer(sName As String) As ILayer
  Set FindLayer = Nothing
  If (MapControl1.ActiveView.FocusMap Is Nothing) Then
    MsgBox "Layer not found: " + sName
    Exit Function
  End If
  Dim pUID As UID
  Set pUID = Nothing
  Dim pLayers As IEnumLayer
  Set pLayers = MapControl1.ActiveView.FocusMap.Layers(pUID, True)
  Dim pLayer As ILayer
  Set pLayer = pLayers.Next
  While (Not pLayer Is Nothing)
    If (pLayer.Name = sName) Then
        Set FindLayer = pLayer
        Exit Function
    End If
    Set pLayer = pLayers.Next
  Wend
  Exit Function
End Function
0 голосов
ответил 25 Май, 10 от sandra (240 баллов)
тут поиск по названию слоя?
0 голосов
ответил 25 Май, 10 от Commrad1 (3,660 баллов)
Да. Функция FindLayer ищет необходимый слой указанный пользователем. 
0 голосов
ответил 25 Май, 10 от sandra (240 баллов)
мне не слой нужен а в одном слое, по его таблице атрибутов найти например кол-во осадков>120
0 голосов
ответил 25 Май, 10 от TDenis (42,620 баллов)
Т.е. программа сама должна догадаться, в каком слое эти осадки искать надо?
0 голосов
ответил 25 Май, 10 от Commrad1 (3,660 баллов)
Пример иммено про это. Функция FindLayer определяет необходимый вам слой на карте. А выше указанная процедура делает запрос в этом найденном слое.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...