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
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
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Maxilla am Mi., 29.06.2005 - 09:13
PermalinkGespeichert von uwelangehh am Mi., 29.06.2005 - 09:43
Permalinkfalls 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
Gespeichert von Gast am Mi., 29.06.2005 - 10:09
Permalinkich 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
Gespeichert von anderer Gast am Mi., 29.06.2005 - 10:32
PermalinkGespeichert von Gast am Mi., 29.06.2005 - 11:54
Permalinkich 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
Gespeichert von Gast am Mi., 29.06.2005 - 11:55
PermalinkUli
Gespeichert von Gast am Mi., 29.06.2005 - 13:09
Permalinkdafü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
Gespeichert von anderer Gast am Mi., 29.06.2005 - 16:22
PermalinkGespeichert von Gast am Do., 30.06.2005 - 14:42
Permalinkvielen 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
Gespeichert von uwelangehh am Do., 30.06.2005 - 15:26
Permalinkwie sieht denn deine endgueltige Loesung aus? Koenntest du den VBA-Code gegebenenfalls in diesem Beitrag bereitstellen?
Danke im voraus
Uwe
Gespeichert von Gast am Do., 30.06.2005 - 15:56
Permalinkhier 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
Gespeichert von anderer Gast am Do., 30.06.2005 - 17:27
Permalink>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
Gespeichert von Gast am Fr., 01.07.2005 - 08:51
Permalinkstimmt, ist mir noch gar nicht aufgefallen, dankeschön.
MfG Uli
Gespeichert von uwelangehh am Fr., 01.07.2005 - 10:10
Permalinkhier ist der Code
Super! Danke euch.
Uwe