Shapefile teilweise sichtbar machen

Hallo Forum,

weiß vielleicht jemand, ob es möglich ist, nur bestimmte Teile eines Shapefiles in der aktuellen Karte sichtbar zu machen?
Oder muß ich dazu ein temporäres Shapefile anlegen, welches die selektierten Features aufnimmt?

Vielen Dank im Vorraus
Uli
Für AV3 hatten wir das gerade relativ ausführlich in diesem Thread (Link)
Hallo Uli,

falls du eine haendische Loesung suchst, dann findest du die betreffende Einstellung in den Themen- bzw. Layer-Eigenschaften:

AV 3: Thema -> Eigenschaften -> Definition -> Abfrage-Manager
AV 8 und hoeher: Rechter Mausklick auf den Layer -> Anzeige bzw. Display Definition

Gruss

Uwe
Hallo Uwe,

ich suche eine programmatische Lösung für ArcGis 9.0.
Ich könnte auch die Features, die nicht angezeigt werden sollen, über ein CursorObjekt transparent machen nur wie?
Ginge das so in der Art?
With objSymbol
.Style = esriSFSNull
End With

vielen dank
Uli
Eine Definition ist schon der richtige Weg. Dafür gibt es die IFeatureLayerDefinition Schnittstelle. Da kannst du einen Ausdruck angeben.
Hallo,

ich habe eine Möglichkeit gefunden: hierzu kopiere ich das shapefile und lösche alle Features, die das bestimmte Attribut nicht aufweisen.
Dieses temporäre Shapefile wird bei löschen des zugehörigen Rasterlayers wieder gelöscht.

Falls aber jemand eine Idee hat, wie ich programmatisch mit nur einem Shapefile zurechtkommen könnte, wäre dieses sicherlich die bessere Lösung.

Danke
Uli
Oh, kleiner grammatikalischer Fauxpas, sorry
Uli
Hallo Uli,
dafür bietet 9.x nun die besten Voraussetzungen.
Unter Eigenschaften /Symbologie /erweitert lässt sich die Transparenz über ein Feld für jedes Objekt steuern. Einfach von 0 = keine Transparenz bis 100=vollständig transparent=nicht sichtbar eingeben.
Einziges Problem - bei echter Transparenz (d.h. zwischen 1 und 99) werden die Farben im Ausdruck blasser und vor allem, der Farbwert in der Legende stimmt nicht mehr mit der Karte überein, weil in der Legende keine Transparenz möglich ist.
Gruss Thomas
Noch mal der Hinweis auf Interface IFeatureLayerDefinition. Guck mal in der Hilfe der Methode CreateSelectionLayer. Da gibt auch ein Beispiel für eine Personal Geodatabase.
Hallo,

vielen Dank für Eure Hilfe, es funktioniert. Man kann sowohl einen neuen Layer erzeugen, der die Auswahl beinhaltet, als auch eine Selektion innerhalb der bestehenden Featureclass durchführen.
Hierbei werden nur die Features angezeigt, die dem angegebenen Kriterium entsprechen.

Uli
Hallo Uli,

wie sieht denn deine endgueltige Loesung aus? Koenntest du den VBA-Code gegebenenfalls in diesem Beitrag bereitstellen?

Danke im voraus

Uwe
Hallo Uwe,

hier ist der Code, mit dem man lediglich einzelne Features einer Featureclass in der aktuellen Karte angezeigt bekommt.


Public Sub selectFeatures()

Dim pMxDoc As IMxDocument
Dim pLayer As ILayer
Dim pMap As IMap
Dim pActiveView As IActiveView
Dim pFeatureLayer As IFeatureLayer2
Dim pGeoFeatureLayer As IGeoFeatureLayer
Dim pFeatureClass As IFeatureClass
Dim pScratchWorkspFact As IScratchWorkspaceFactory
Dim pScratchWorkspace As IWorkspace
Dim pQuery As IQueryFilter
Dim pSelectionSet As ISelectionSet
Dim pFIDs As IEnumIDs
Dim pFID As Long
Dim pFeatureIDSet As IFeatureIDSet
Dim i As Long

' ILayer-Interface des aktuellen Layers
Set pMxDoc = ThisDocument
Set pMap = pMxDoc.FocusMap

' Sucht in der TOC nach dem gesuchten Layer
For j = 0 To pMap.LayerCount - 1
If (TypeOf pMap.Layer(j) Is IFeatureLayer2) Then
Set pLayer = pMap.Layer(j)
If (pMap.Layer(j).name = "PinPoint6") Then
GoTo nächste
Else
Exit Sub
End If
End If
Next j

nächste:
Set pFeatureLayer = pLayer
Set pQuery = New QueryFilter
Set pScratchWorkspFact = New ScratchWorkspaceFactory
Set pScratchWorkspace = pScratchWorkspFact.DefaultScratchWorkspace

' Es werden diejenigen elemente NICHT angezeigt, deren REF_ID Attribut
' ungleich 1786 ist
pQuery.WhereClause = "REF_ID <> '1786'"

Set pFeatureClass = pFeatureLayer.FeatureClass
Set pSelectionSet = pFeatureClass.Select(pQuery, esriSelectionTypeIDSet, _
esriSelectionOptionNormal, pScratchWorkspace)
Set pFIDs = pSelectionSet.IDs
Set pFeatureIDSet = New FeatureIDSet

For i = 1 To pSelectionSet.Count
pFID = pFIDs.Next
pFeatureIDSet.Add pFID
Next i

Set pGeoFeatureLayer = pLayer
Set pGeoFeatureLayer.ExclusionSet = pFeatureIDSet

pMxDoc.ActiveView.Refresh

End Sub
>...
>If (pMap.Layer(j).name = "PinPoint6") >Then
>GoTo nächste
>Else
>Exit Sub
>End If
>...

Das funktioniert aber nur, wenn dein PinPoint Layer der erste Featurelayer in der Karte ist.


Alternativ hier eine Lösung mit einer Definition:
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument

Dim pMap As IMap
Set pMap = pMxDoc.FocusMap

Dim pLayer As ILayer
Dim l As Long
For l = 0 To pMap.LayerCount - 1
Set pLayer = pMap.Layer(l)
If TypeOf pLayer Is IFeatureLayer2 Then
If pLayer.Name = "PinPoint6" Then
Exit For
End If
End If
Next l

If pLayer Is Nothing Then
Exit Sub
End If

Dim pFLDef As IFeatureLayerDefinition
Set pFLDef = pLayer

pFLDef.DefinitionExpression = "REF_ID <> '1786'"

pMxDoc.ActiveView.Refresh
Hallo anderer Gast,

stimmt, ist mir noch gar nicht aufgefallen, dankeschön.

MfG Uli
Hallo Uli und anderer Gast,

hier ist der Code

Super! Danke euch.

Uwe