2010-08-25 2 views
0
ILayer layer = mapControl.get_Layer(1); //layer 1 is usa_base_map 

У меня есть ILayer, теперь я хочу получить доступ и включить и выключать различные подслои, такие как слой улицы или слой железной дороги. Можете ли вы рассказать мне, как получить доступ к этим слоям?Как получить доступ к подслою базовой карты в arcobjects?

ответ

1

Я думаю, что вы хотите наложить свой групповой слой на ICompositeLayer (linky).

1

Доступ к подуровню базовой карты В следующем примере кода показано, как получить доступ к подуровню базовой карты, получить внутренний уровень, обновить свойство на внутреннем уровне и уведомить слой базовой карты об изменении. Уведомление аннулирует внутренний кеш слоя, чтобы содержимое было перерисовано, чтобы отразить обновление. В этом примере обновление очищает выражение определения функционального слоя. [C#]

private void UpdateBasemapSublayerAndNotify(IBasemapLayer basemapLayer, IMap map) 
{ 
    ICompositeLayer basemapCompositeLayer = basemapLayer as ICompositeLayer; 
    IBasemapSubLayer basemapSubLayer = basemapCompositeLayer.get_Layer(0)as 
     IBasemapSubLayer; 
    ILayer innerLayer = basemapSubLayer.Layer; 
    IFeatureLayer featureLayer = innerLayer as IFeatureLayer; 
    if (featureLayer != null) 
    { 
     IFeatureLayerDefinition featureLayerDef = featureLayer as 
      IFeatureLayerDefinition; 
     featureLayerDef.DefinitionExpression = ""; 
    } 
    //When performing operations against the wrapped layer that change properties, you must 
    //notify the basemaplayer so the display cache can be recreated if necessary. 
    basemapLayer.NotifyLayerChanged(basemapSubLayer as ILayer, 
     esriLayerEventHint.esriLayerEventHintProperties, null); 
    IActiveView activeView = map as IActiveView; 
    activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, basemapLayer as 
     object, null); 
} 

[VB.NET]

Private Sub UpdateBasemapSublayerAndNotify(ByVal basemapLayer As IBasemapLayer, ByVal map As IMap) 
    Dim basemapCompositeLayer As ICompositeLayer = TryCast(basemapLayer, ICompositeLayer) 
    Dim basemapSubLayer As IBasemapSubLayer = TryCast(basemapCompositeLayer.get_Layer(0), IBasemapSubLayer) 
    Dim innerLayer As ILayer = basemapSubLayer.Layer 
    Dim featureLayer As IFeatureLayer = TryCast(innerLayer, IFeatureLayer) 
    If featureLayer IsNot Nothing Then 
     Dim featureLayerDef As IFeatureLayerDefinition = TryCast(featureLayer, IFeatureLayerDefinition) 
     featureLayerDef.DefinitionExpression = "" 
    End If 

    'When performing operations against the wrapped layer that change properties, you must 
    'notify the basemaplayer so the display cache can be recreated if necessary. 
    basemapLayer.NotifyLayerChanged(TryCast(basemapSubLayer, ILayer), esriLayerEventHint.esriLayerEventHintProperties, Nothing) 

    Dim activeView As IActiveView = TryCast(map, IActiveView) 

    activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, TryCast(basemapLayer, Object), Nothing) 
End Sub 
Смежные вопросы