Več

ArcObjects 10 - kopiranje polj (struktura tabel) v nov razred lastnosti

ArcObjects 10 - kopiranje polj (struktura tabel) v nov razred lastnosti


Ustvarjam nov razred lastnosti s shemo tabele atributov (imena polj, vrste itd.), Kopirano iz drugega razreda lastnosti. Nato bi želel to shemo nekoliko spremeniti (npr. Dodati dodatno polje).

Kateri je najboljši način za to? Ali naj preidem skozi vsa vnosna polja in ustvarim ustrezna izhodna polja?

Hvala vnaprej, Jan


Razmislil bi o uporabi IFieldCheckerja. Nekaj ​​vzorčne kode je pod Ustvarjanje polj izhodnega razreda lastnosti in geometrije razdelku na tej strani.

Če želite spremljati, katera ciljna polja so izpeljana iz izvornih polj, razmislite o uporabi IModelInfo:

… Ime modela, ki je orodje za razvijalce predmetov po meri, ki uporabljajo za zagotovitev imen predmetov, neodvisnih od pravega imena ali imena vzdevka.

Če morate samo dodati polje, je najpreprosteje najverjetneje poklicati IClone.Clone () v članu IFeatureClass.Fields izvornega razreda lastnosti, nato pa z uporabo IFieldsEdit.AddField v nastalem klonu dodati eno polje, nato pa to uporabiti za ustvarjanje novega featureclass.


Tukaj je nekaj podprogramov, ki jih uporabljam pri ustvarjanju novih razredov funkcij z obstoječo predlogo in dodajanju polj.

Nekaj ​​opomb o kodi. Ustvaril sem globalno spremenljivko za geoprocesor (Globals.GP) in to sprožil drugje. Prav tako bi morali biti sposobni uporabiti IFeatureClass kot vhod za lastnost predloge orodja CreateFeatureclass, vendar napaka NIM068724 (ki je lahko odpravljena v 10.1) to trenutno preprečuje, zato morate uporabiti ime poti za razred lastnosti.

Javno podpolje AddField (vnos ByVal kot objekt, ime polja ByVal kot niz, vrsta polja ByVal kot niz, izbirna natančnost ByVal kot dolga = 0, izbirna lestvica ByVal kot dolga = 0, izbirna dolžina ByVal kot dolga = 0, izbirna polja ByVal kot niz = nič , Izbirno ByVal Nullable As String = "NULLABLE", Neobvezno ByVal Zahtevano kot String = "NON_REQUIRED", Neobvezno ByVal Domain As String = Nothing) Dim AddField As New ESRI.ArcGIS.DataManagementTools.AddField Dim Result As ESRI.GecRecGecRecGecRec Poskusite uporabiti Releaser As New ESRI.ArcGIS.ADF.ComReleaser releaser.ManageLifetime (AddField) AddField.in_table = Vnos AddField.field_name = FieldName AddField.field_type = FieldType AddField.field_precision = Precision AddField.field_scaleField = field_alias = FieldAlias ​​AddField.field_is_nullable = Nullabilno AddField.field_is_required = Zahtevano AddField.field_domain = Rezultat domene = RunTool (AddField, nič) Če rezultat ni nič, potem sistem .Windows.Forms.MessageBox.Show ("Polja ni bilo mogoče dodati") Konec Če končate z uporabo Catch ex As Exception System.Windows.Forms.MessageBox.Show (npr. ToString, "Napaka pri dodajanju polja") Končajte Prekini podzasebno funkcijo CreateFeatureClass (ByVal PathString As String, ByVal Name As String, ByVal pTemplateFClass As ESRI.ArcGIS.Geodatabase.IFeatureClass) Kot ESRI.ArcGIS.Geodatabase.IFeatureClass Dim CreateFC As New ESRI.ATcSaScReSaScReSaScReSaScReS.Rec. .ArcGIS.Geodatabase.IDataset Rezultat zatemnitve kot ESRI.ArcGIS.Geoprocessing.IGeoProcessorResult2 Dim pot kot niz Poskusite uporabiti sprostitveni program kot nov ESRI.ArcGIS.ADF.ComReleaser releaser.ManageLifetime (CreateFC.pecTempeRecTemp. esriGeometryType.esriGeometryPoint ShapeType = "Point" Primer ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline ShapeType = "Line" Primer ESRI.ArcGIS.Geometry.esriGeometryType.ypesey " ct nabor podatkov = pTemplateFClass Pot = nabor podatkov.Workspace.PathName & "" & niz podatkov.Ime Če je nabor podatkov.Workspace.WorkspaceFactory.WorkspaceType = ESRI.ArcGIS.Geodatabase.esriWorkspaceType.esriFileSystemWorksWorksWorksWorks. DataSourcesFile.ShapefileWorkspaceFactory Nato Pot = Pot & ".shp" Končaj, če se konča, če zatemni pSR Kot ESRI.ArcGIS.Geometry.ISpatialReference3 = GetSpatialReferenceFromDataset (pTemplateFClass) CreateFC.out_path = Create_TypetType Ustvari Pot CreateFC.spatial_reference = GetSpatialReferenceFromDataset (pTemplateFClass) Rezultat = RunTool (CreateFC, nič), če rezultat ni nič, potem System.Windows.Forms.MessageBox.Show ("Ni bilo mogoče ustvariti nabora podatkov") Vrniti nič konca, če se vrne ReturnObjectfromResult (Rezultat, rezultat Razred ") Končaj z uporabo Catch ex As Exception System.Windows.Forms.MessageBox.Show (ex.ToString," Ustvari napako razreda funkcij InMemory ") Vrni nič Konec Poskusi Končati Func vanje javnih funkcij GetSpatialReferenceFromDataset (ByVal nabor podatkov Kot ESRI.ArcGIS.Geodatabase.IDataset) Kot ESRI.ArcGIS.Geometry.ISpatialReference3 "Če CCD podpira IGeoDataset Če vrste uporabljene nabor podatkov ESRI.ArcGIS.Geodatabase.IGeoDataset Nato", potem zgrabi referenčne podatke o prostorski in vrni. Zatemni geoDataset kot ESRI.ArcGIS.Geodatabase.IGeoDataset = CType (nabor podatkov, ESRI.ArcGIS.Geodatabase.IGeoDataset) Vrni geoDataset.SpatialReference Else Vrni ničesar 'drugače nič ne vrne End If End Funkcija prijatelja Funkcija ReturnObjectfromReultGresecResultRozultatResultGresec .IGeoProcessorResult2, vrsta ByVal kot niz) Kot objekt Dim GPVal Kot ESRI.ArcGIS.Geodatabase.IGPValue Dim InMemFC Kot String Dim GPUtil Kot ESRI.ArcGIS.Geoprocessing.IGPUtilities3 = Novi rezultat ESRI.ArcUtil.Ge.Go. 0) InMemFC = GPVal.GetAsText () Izberite vrsto primera Primer "Razred funkcij" Vrni GPUtil.OpenFeatureClassFromString (InMemFC) Primer "Tabela" Vrni GPUtil.OpenTableFromString (InMemFC) Konec Izberite Ujemite kot izjemo System.Windows.Forms.Message. (npr. ToString, "Vrni napako FeatureClass") Vrni nič Končaj Poskusi Konec funkcije Prijateljska funkcija RunTool (Postopek ByVal kot ESRI.ArcGIS.Geoprocessor.IGPProcess, ByVal TC Kot ESRI.ArcGIS.esriSystem.ITrackCancel2) As ESRI.Ar cGIS.Geoprocessing.IGeoProcessorResult2 Rezultat zatemnitve kot ESRI.ArcGIS.Geoprocessing.IGeoProcessorResult2 Poskusite rezultat = CType (Globals.GP.Execute (proces, nič), ESRI.ArcGIS.Geoprocessing.ISeReta.ISeRes.Reult.ISeResR.Reult.ISeResR.Reult.ISeRes.Reult.ISeR.Reult.ISeR.Reult.ISe.Reg.Result.ISeRe.si) .esriJobStatus.esriJobSucceeded Nato ReturnMessages (Rezultat, "Napaka pri geoprocesiranju") Globals.GP.ClearMessages () Ujemite kot izjemo System.Windows.Forms.MessageBox.Show (ex.ToString, "Run Geoprocessor") End Try Return Return End Funkcija

Na splošno lahko uporabite naslednje orodje ArcToolbox:

Upravljanje podatkov -> Razred funkcij -> Ustvari razred lastnosti

v izbirnem polju "Razred funkcij predloge" morate izbrati izvirni razred lastnosti, to je vir sheme polja

Novi prazen razred lastnosti bo imel isto shemo izvornega polja, nato pa lahko dodate nova polja

Upam, da to pomaga


Poglej si posnetek: ESRI ArcGIS 10: Analysis in ArcGIS 10