Mer

Finne lag basert på kildenavnet ved hjelp av ArcObjects?


Jeg er relativt ny på å lage verktøy med ArcObjects, og jeg har problemer med å finne et lag basert på lagets kildenavn ved å gå gjennom alle lagene. Jeg har her sett at det er mulig, men jeg klarer ikke å få det til å fungere. Mangler jeg noe enkelt, eller er det en annen tilnærming som jeg bør ta? Jeg ser her at det er mulig å telle lag og løkke gjennom dem, men jeg er fortsatt igjen og prøver å bestemme kildenavnet på et lag. Eksemplet mitt nedenfor ser etter et lag hvis kilde er en funksjonsklasse som heter bygninger. Hvis det hjelper, har datasettvariabelen verdien "Ingenting" når jeg bruker en MessageBox til å skrive ut verdien til datasettet.Navn ved hver iterasjon.

'- annen kode for å hente redaktør, sette opp andre variabler og starte redigeringsoperasjon Dim findName As String = "bygninger" Dim isLayerFound As Boolean = False Dim map as IMap = m_Editor.Map Dim subfield as Integer =' some subfield integer ' --Sjekk for punktlag i redigering Hvis ikke kart er ingenting da '- Gå gjennom alle kartlagene for å finne det ønskede For i = 0 Til kart.LayerCount - 1 Dim currentLayer Som ILayer = map.Layer (i) Dim dataset As IDataset = CType (currentLayer, IDataset) If dataset.Name = findName Then isLayerFound = True '- Sørg for at laget kan redigeres Hvis m_editLayers.IsEditable (currentLayer) Så' --Sett lag for redigering av m_editLayers.SetCurrentLayer (currentLayer, underfelt) Avslutt for annet m_Editor.AbortOperation () MessageBox.Show ("Layer" + findName + "kan ikke redigeres. Operasjon avbrutt") Avslutt Sub End If End If Next i If isLayerFound = False Then m_Editor.AbortOperation () MessageBox.Show ("Layer" + findName + "ble ikke funnet. Operasjonen avbrutt") Avslutt Sub End If End If

For å finne navnet på datasettet slik det er lagret i databasenIDataset.BrowseName.IDataset.Namevil gi deg lagnavnet slik det heter i ArcMap.

Du bør også teste at laget kan støpes tilIDataset:Hvis TypeOf currentLayer er IDataset da... Ting som gruppelag implementeres ikkeIDataset, og vil forårsake en feil.


Jeg ville bare legge ut min endelige arbeidskode:

'--Check For Point Layer In Editing If Not map is Nothing Then' --Slå gjennom alle kartlagene for å finne det ønskede Dim enumLayer Som IEnumLayer = map.Layers (Nothing, True) enumLayer.Reset () Dim currentLayer Som ILayer = enumLayer.Next () Gjør inntil gjeldende lag er ingenting hvis TypeOf currentLayer er IDataset og ikke TypeOf currentLayer er IRasterLayer Da dim datasett som IDataset = currentLayer Hvis dataset.BrowseName = findName Da er isLayerFound = True '- Sørg for at laget kan redigeres hvis m_editLayers.IsEditable (currentLayer) Deretter '--Sett lag for redigering av m_editLayers.SetCurrentLayer (currentLayer, subfield) Exit Do Else m_Editor.AbortOperation () MessageBox.Show ("Layer" + findName + "kan ikke redigeres. Operasjonen avbrutt") Exit Sub End If End If End If currentLayer = enumLayer.Next () Loop If isLayerFound = False Then m_Editor.AbortOperation () MessageBox.Show ("Layer" + findName + "kunne ikke bli funnet. Operasjonen avbrutt") Avslutt Sub End Hvis slutt hvis


Se videoen: Lag is unreal (Oktober 2021).