Vairāk

Funkciju apvienošana vienā programmatiski


Man ir formas fails ar daudzstūriem. Es tos varu apvienot manuāli, dodoties uz rediģēšanas sesiju un atlasot dažas apvienojamās funkcijas un pēc tam izmantojot redaktora pogu Apvienot.

Kā to izdarīt programmatiski (VBA)?

Esmu atradis līdzīgus veidus, taču tas neatrisina problēmu:

  1. Standarta Izšķīdiniet rīks (no ArcToolbox) šim nolūkam nedarbojas pareizi, jo tas nogriež daudzus laukus un tāpēc, ka tas darbojas ar visu FeatureClass, bet ne ar atsevišķām funkcijām.
  2. Kā es zinu, izlasot dažus piemērus, izmantojot IBasic Ģeoprocesors (VBA) ir viena un tā pati problēma - tā darbojas ar visu FeatureClass, izveidojot jaunu FeatureClass, bet ne ar atsevišķām funkcijām, tos izmetot tajā pašā FeatureClass.

@kenbuja, Šeit ir mans mēģinājums vba (nevis vb.net): CType izmantošana izraisa kļūdu Compile: Apakšgrupa vai Funkcija nav definēta. Ko es daru nepareizi?

Dim pMxDoc Kā IMxDocument Dim pCountyLayer Kā IFeatureSelection Dim pCountySelection Kā ISelectionSet Dim pCountyCursor Kā IFeatureCursor Dim pCountyCursor2 Kā IFeatureCursor Dim pFirstFeature Kā IFeature Dim pSecondFeature Kā IFeature Dim pThirdFeature Kā IFeature Set pMxDoc = ThisDocument Set pCountyLayer = pMxDoc.FocusMap.Layer (1) Set pCountySelection = pCountyLayer.SelectionSet 'Izveidojiet kursorus no atlasītā objekta slānī (1). pCountySelection.Search Nothing, True, pCountyCursor pCountySelection.Search Nothing, True, pCountyCursor2 'Atgriež atlasītās funkcijas no kursora. Set pFirstFeature = pCountyCursor.NextFeature Set pThirdFeature = pCountyCursor2.NextFeature Set pSecondFeature = pCountyCursor2.NextFeature Dim pFirstGeometry Kā IGeometry Set pFirstGeometry = CType (pFirstFeature.Shape, IGeometry) Dim pTopoOperator Kā ITopologicalOperator Set pTopoOperator = CType (pFirstGeometry, ITopologicalOperator) Dim pSecondGeom Kā IGeometry Iestatīt pSecondGeom = CType (pSecondFeature.Shape, IGeometry) Dim pMergedGeom As IGeometry Set pMergedGeom = pTopoOperator.Union (pSecondGeom)

Lai programmiski apvienotu divus daudzstūrus, varat izmantot metodi ITopologicalOperator's Union. Šis piemērs (rakstīts VB.NET) parāda, kā tas tiek darīts.

Aptumšot pFirstGeometry As IGeometry = CType (pFirstFeature.shape, IGeometry) Dim pTopoOperator As ITopologicalOperator = CType (pFirstGeometry, ITopologicalOperator) Dim pSecondGeom As IGeometry = CType (pSecondFeater.popecOperge

Esmu atradis Editor_Merge analogu vba:

Application.Document.CommandBars.Find (ArcID.Editor_Merge). Execute

bet parādās logs, kas ļauj atlasīt objektu, kuram tiks piešķirta rezultāta ģeometrija, un es nezinu, kā iezīmi izvēlēties programmatiski.

Tāpēc esmu atradis citu kodu - tas apvieno atlasītās funkcijas (un pēc apvienošanas izdzēš sākotnējās funkcijas), rezultāts paliek tajā pašā funkciju klasē

Par Kļūda Iet EH Dim pMxDocument Kā IMxDocument Dim pMap Kā IMAP Dim pActiveView Kā IActiveView Dim pFeatureSelection Kā IFeatureSelection Dim pTopologicalOperator Kā ITopologicalOperator Dim pEnumGeometry Kā IEnumGeometry Dim pEnumGeometryBind Kā IEnumGeometryBind Dim pEnumFeature Kā IEnumFeature Dim pFeature Kā IFeature Dim pNewFeature Kā IFeature Dim pOutputGeometry Kā IGeometry Dim pUID Kā jauns UID Dim pEditor Kā IEditor Dim pFeatureLayer As IFeatureLayer Dim pFeatureClass As IFeatureClass Set pMxDocument = ThisDocument Set pMap = pMxDocument.FocusMap Set pActiveView = pMxDocument.FocusMap Set pFassureLayer = pMeatDealFeature uz Redaktora paplašinājumu. pUID = "esriEditor.Editor" Set pEditor = Application.FindExtensionByCLSID (pUID) Set pFeatureSelection = pFeatureLayer Set pEnumGeometryBind = Jauns EnumFeatureGeometry pEnumGeometryBind.BindGeometrySource Nekas, pFeatureSelection.SelectionSet Ja pFeatureSelection.SelectionSet.Count = 0 Tad Iziet Sub Set pEnumGeometry = pEnumGeometryBind Set pTopologicalOperator = Jauns daudzstūris pTopologicalOperator.ConstructUnion pEnumGeometry 'Iegūstiet atlasīto kopu un ievietojiet kursorā. Iestatiet pEnumFeature = pMap.FeatureSelection Set pFeature = pEnumFeature.Next 'Iegūstiet katra daudzstūra ģeometriju, pievienojiet to jaunajam polijonam' un izdzēsiet sākotnējo. Vai gan nav pFeature nekas Ja pOutputGeometry nekas Tad Set pOutputGeometry = pFeature.Shape Else Set pOutputGeometry = pTopologicalOperator.Union (pFeature.Shape) Beigas Ja Set pTopologicalOperator = pOutputGeometry pFeature.Delete Set pFeature = pEnumFeature.Next Loop 'Izveidot jaunu funkciju un saglabājiet lietojumprogrammas numuru. Set pNewFeature = pFeatureClass.CreateFeature Set pNewFeature.Shape = pOutputGeometry 'Saglabājiet jauno apvienoto funkciju. pNewFeature.Store 'Pārtrauciet rediģēšanas darbību. 'pEditor.StopOperation ("Apvienot daudzstūrus")' Atsvaidziniet kartes skatu pActiveView.Refresh Exit Sub EH: MsgBox Err.Description, vbInformation, "MergeCEPolygons"


Skatīties video: Loģiskā funkcija IF (Oktobris 2021).