Daha çox

Xüsusiyyətləri vahid şəkildə proqram halına birləşdirmək


Çoxbucaqlı şəkillərim var. Düzəliş sessiyasına gedərək və birləşdiriləcək bəzi xüsusiyyətləri seçərək Redaktor altında birləşmə düyməsini istifadə edərək onları əl ilə birləşdirə bilərəm.

Bunu proqramlı (VBA-da) necə etmək olar?

Analoji yolları tapdım, amma problemi həll etmir:

  1. Standart Həll edin alət (ArcToolbox-dan) bu məqsədlə düzgün işləmir, çünki bir çox sahəni kəsir və ayrıca FeatureClass ilə işləyir, lakin ayrı xüsusiyyətlərlə deyil.
  2. Bəzi nümunələri oxuyaraq bildiyim kimi IBasicGeoprosessor (VBA) eyni problemə sahib olmaq - bütün FeatureClass ilə işləyir, yeni FeatureClass istehsal edir, lakin ayrı FeatureClass içərisinə daxil olmaqla ayrı xüsusiyyətlərlə deyil.

@kenbuja, Budur vba sınaması (vb.net-də deyil): CType istifadə etmək Kompilyasiya səhvinə səbəb olur: Alt və ya İşlev təyin olunmur. Nə səhv edirəm?

Dim pMxDoc kimi IMxDocument Dim pCountyLayer kimi IFeatureSelection Dim pCountySelection kimi ISelectionSet Dim pCountyCursor kimi IFeatureCursor Dim pCountyCursor2 kimi IFeatureCursor Dim pFirstFeature kimi IFeature Dim pSecondFeature kimi IFeature Dim pThirdFeature kimi IFeature Set pMxDoc = ThisDocument Set pCountyLayer = pMxDoc.FocusMap.Layer (1) Set pCountySelection = pCountyLayer.SelectionSet 'Layer (1)' də seçilmiş xüsusiyyətdən imleci yaradın. pCountySelection.Search Nothing, True, pCountyCursor pCountySelection.Search Nothing, True, pCountyCursor2 'İmlecdən seçilmiş xüsusiyyətləri qaytarın. Set pFirstFeature = pCountyCursor.NextFeature Set pThirdFeature = pCountyCursor2.NextFeature Set pSecondFeature = pCountyCursor2.NextFeature Dim pFirstGeometry kimi IGeometry Set pFirstGeometry = ctype (pFirstFeature.Shape, IGeometry) Dim pTopoOperator kimi ITopologicalOperator Set pTopoOperator = ctype (pFirstGeometry, ITopologicalOperator) Dim pSecondGeom kimi IGeometry PSecondGeom = CType (pSecondFeature.Shape, IGeometry) Dim pMergedGeom IGeometry Set pMergedGeom = pTopoOperator.Union (pSecondGeom)

İki poliqonu bir yerə birləşdirmək üçün ITopologicalOperator's Union metodundan istifadə edə bilərsiniz. Bu nümunə (VB.NET-də yazılmış) bunun necə edildiyini göstərir.

Dim pFirstGeometry As IGeometry = CType (pFirstFeature.shape, IGeometry) Dim pTopoOperator As ITopologicalOperator = CType (pFirstGeometry, ITopologicalOperator) Dim pSecondGeom As IGeometry = CTypePoometom (pSecoReometry).

VBA-da Editor_Merge analogunu tapdım:

Application.Document.CommandBars.Find (ArcID.Editor_Merge). İcra et

ancaq nəticə həndəsəsinin təyin ediləcəyi xüsusiyyəti seçməyə imkan verən pəncərə görünür və bu xüsusiyyəti proqramlı şəkildə necə seçəcəyimi bilmirəm.

Beləliklə başqa bir kod tapdım - seçilmiş xüsusiyyətləri birləşdirir (və birləşdikdən sonra ilkin xüsusiyyətləri silir), nəticə eyni xüsusiyyət sinifində qalır

Error keçid EH Dim pMxDocument kimi IMxDocument Dim pMap kimi IMAP Dim pActiveView kimi IActiveView Dim pFeatureSelection kimi IFeatureSelection Dim pTopologicalOperator kimi ITopologicalOperator Dim pEnumGeometry kimi IEnumGeometry Dim pEnumGeometryBind kimi IEnumGeometryBind Dim pEnumFeature kimi IEnumFeature Dim pFeature kimi IFeature Dim pNewFeature kimi IFeature Dim pOutputGeometry kimi IGeometry Dim pUID On Yeni UID Dim pEditor olaraq IEditor Dim pFeatureLayer kimi IFeatureLayer Dim pFeatureClass As IFeatureClass Set pMxDocument = ThisDocument Set pMap = pMxDocument.FocusMap Set pActiveView = pMxDocument.FocusMap Set pFeature redaktor uzantısına. pUID = "esriEditor.Editor" Set pEditor = Application.FindExtensionByCLSID (pUID) Set pFeatureSelection = pFeatureLayer Set pEnumGeometryBind = New EnumFeatureGeometry pEnumGeometryBind.BindGeometrySource Nothing, pFeatureSelection.SelectionSet varsa pFeatureSelection.SelectionSet.Count = 0 sonra Exit Sub Set pEnumGeometry = pEnumGeometryBind Set pTopologicalOperator = Yeni poliqon pTopologicalOperator.ConstructUnion pEnumGeometry 'Seçilmiş dəsti alın və imlecə qoyun. PEnumFeature = pMap.FeatureSelection seçin pFeature = pEnumFeature.Next 'Hər çoxbucağın həndəsəsini alın, yeni çoxbucağa əlavə edin' və orijinalını silin. POutputGeometry heç bir şey yoxdursa, pFeature heç bir şey etmirsə, pOutputGeometry = pFeature.Shape Else Set pOutputGeometry = pTopologicalOperator.Union (pFeature.Shape) End Əgər Set pTopologicalOperator = pOutputGeometry pFeature.ete.ete tətbiq nömrəsini saxlayın. PNewFeature = pFeatureClass.CreateFeature seçin pNewFeature.Shape = pOutputGeometry 'Yeni birləşdirilmiş xüsusiyyəti saxlayın. pNewFeature.Store 'Düzəliş əməliyyatını dayandırın. 'pEditor.StopOperation ("Çoxbucaqlı Birləşdirmə")' Xəritə görünüşünü təzələyin pActiveView.Refresh Exit Sub EH: MsgBox Err. Təsvir, vbInformation, "MergeCEPolygons"