Daha çox

Vb.net arcobjects məkan sorğusu yalnız istədiyiniz qatın sahələrini alır


Hal-hazırda vb.net-də ArcObjects (10.2.1) istifadə edirəm (2012-ə qarşı). İnkişaf etdirmək istədiyim bir məkan sorğusu vasitəsidir. Funksiyada 2 addım var:

(1) Müəyyən bir ərazidə xüsusiyyətləri seçmək üçün ArcMap-da "Xüsusiyyətləri seçin" alətindən istifadə edin.

(2) Bir təbəqədən seçilmiş bir neçə xüsusiyyət sahəsini sadalayın.

Sualım, sahə dəyərlərini yalnız istədiyiniz xüsusiyyət təbəqəsi üçün necə əldə etməkdir. Kodum aşağıda verilmişdir. Yalnız ArcMap-da istədiyiniz qat effektiv olduqda işləyir.

Dim pMxDoc kimi IMxDocument Dim pMap kimi IMAP Dim pEnumFeature kimi IEnumFeature Dim pEnumFeatureSetup kimi IEnumFeatureSetup Dim pFeature kimi IFeature pMxDoc = My.ArcMap.Document pMap = pMxDoc.FocusMap pEnumFeature = pMap.FeatureSelection pEnumFeatureSetup = pEnumFeature pEnumFeatureSetup.AllFields = True pFeature = pEnumFeature.Next Dim layerNum = GetIndexNumberFromLayerName (pActiveView, "testdb.DBO.testTable") pFeatSel = pMap.Layer (layerNum) Dim tempArr Yeni Siyahı Olaraq (String) Edin (pFeature Heç Nə deyil) tempArr.Add (pFature) Fields.FindField ("Item_ID")). ToString) pFeature = pEnumFeature.Next Loop Dim message = String.Join (Environment.NewLine, tempArr.ToArray ()) Dim lstOfString As List (Of String) = New List (Of String) (tempArr) Dim selectedCount = lstOfString.Count End, əgər İctimai İşlev GetIndexNumberFromLayerName (ByVal activeView As ESRI.ArcGIS.Carto.IActiveView, ByVal layerName As System.String) as System.Int32 If activeView Is Heothing OrElse layer Dönüş -1 Sonu Dim xəritəsi ESRI.ArcGIS.Carto.IMap = activeView.FocusMap Dim numberOfLayers As System.Int32 = map.LayerCount Dim i As System.Int32 = 0 Do while i 

Düşünürəm ki, bunu olmalı olduğundan daha çətinləşdirirsiniz. Seçdiyiniz xüsusiyyətləri IMap.FeatureSelection-dan əldə edirsiniz. Beləliklə, birdən çox təbəqə seçimi qaytara bilər.

Daha yaxşı bir yol, əlinizə bir şey gətirməkdir Layer, bunu an IFeatureLayer sonra bir IFeatureSelection interfeysi IFeatureLayer. Buradan bir əldə edə bilərsiniz ISelectionSet. Bu, xüsusi bir təbəqədəki seçim üzərində bir imleci qaytaran bir Axtarış metoduna malikdir.

Budur biraz nümunə kodu:

Dim pFeatureSelection As IFeatureSelection pFeatureSelection = pFeatureLayer Dim pSelectionSet As ISelectionSet pSelectionSet = pFeatureSelection.SelectionSet Dim pFeatureCursor As IFeatureCursor = Nothing pSelectionSet.Search (Nothing, True, pFature)

Tamamilə işləyən kod budur:

pMxDoc = My.ArcMap.Application.Document pMap = pMxDoc.FocusMap pActiveView = pMxDoc.FocusMap Dim layerNum = GetIndexNumberFromLayerName (pActiveView, "testdb.DBO.testTable") pFeatureLeFayLeatureLeFayature pFeatureSelection = pFeatureLayer Dim pSelectionSet As ISelectionSet pSelectionSet = pFeatureSelection.SelectionSet Dim pFeatureCursor As IFeatureCursor = Heç bir şey pSelectionSet.Search (Heç bir şey, True, pFeatureCursor) Dim tempArr AsFature As Of Reature (Yeni) pFeature Heç Nədir) tempArr.Add (pFeature.Value (pFeature.Fields.FindField ("Item_ID")). ToString) pFeature = pFeatureCursor.NextFeature Loop


Videoya baxın: ArcGIS ModelBuilder: How to Create a Model with Parameters (Oktyabr 2021).