Viac

Ako pridať nový balík do Parcel Fabric z existujúcich funkcií balíka (ArcObjects)

Ako pridať nový balík do Parcel Fabric z existujúcich funkcií balíka (ArcObjects)


Chcem vytvoriť nový balík vo vrstve balíkovej tkaniny. Mám súradnice x, y na vytváranie balíkov. Veľa som hľadal a nenašiel som nič, čo by v skutočnosti "VYTVORILO" balík.

Tu je to, čo som zatiaľ vyskúšal:

IPointCollection body = feat.ShapeCopy ako IPointCollection; // existujúci polygón z inej triedy funkcií používaný na kopírovanie x, y, z… ICadastralPoints cadPoints = new CadastralPacketClass (); pre (int i = 0; i 

Dúfam, že ma niekto nasmeruje správnym smerom.


Uistite sa, že na mape je prítomná vrstva balíkovej tkaniny a začali ste upravovať. ak ste to ešte neurobili, pridajte do svojho projektu nasledujúce zostavy.

  • ESRI.ArcGIS.CadastralUI
  • ESRI.ArcGIS.GeoSurvey
  • ESRI.ArcGIS.GeoDatabaseExtensions

Nasledujúcu triedu a jej metódy použite na vytvorenie objektu balíkového tkaniva z vybratého balíkového prvku na mape. Metódy sú testované, ak však nájdete chybu, dajte mi vedieť.

//@FaridCher na GIS.StackExchange // je možné kopírovať a/alebo distribuovať bez výslovného povolenia pomocou ESRI.ArcGIS.CadastralUI; pomocou ESRI.ArcGIS.Editor; pomocou ESRI.ArcGIS.esriSystem; pomocou ESRI.ArcGIS.Geodatabase; pomocou rozšírení ESRI.ArcGIS.GeoDatabaseExtensions; pomocou ESRI.ArcGIS.Geometry; pomocou ESRI.ArcGIS.GeoSurvey; pomocou systému; pomocou System.Collections.Generic; pomocou System.Linq; pomocou System.Runtime.InteropServices; pomocou System.Text; pomocou System.Windows.Forms; priestor názvov MyParcelFabric {class CreateParcelFabric_FromPolygonSelection {protected override void OnClick () {var enums = ArcMap.Document.ActiveView.FocusMap.FeatureSelection as IEnumFeature; IFeature feat = enums.Next (); if (feat == null) {return; } CreateParcelFabric (výkon); } private void CreateParcelFabric (IFeature polygonFeature) {try {UID pUID = new UIDClass (); pUID.Value = "{114D685F-99B7-4B63-B09F-6D1A41A4DDC1}"; ICadastralExtensionManager2 pCadExtMan = (ICadastralExtensionManager2) ArcMap.Application.FindExtensionByCLSID (pUID); ICadastralEditor pCadEd = (ICadastralEditor) ArcMap.Application.FindExtensionByCLSID (pUID); IParcelEditManager pParcEditorMan = (IParcelEditManager) pCadEd; IEditor pEd = (IEditor) ArcMap.Application.FindExtensionByName ("editor objektov esri"); if (pEd.EditState == esriEditState.esriStateNotEditing) {MessageBox.Show ("Začnite prosím s úpravami a skúste to znova."); návrat; } ICadastralPacketManager pCadPacketMan = (ICadastralPacketManager) pCadEd; bool bStartedWithPacketOpen = pCadPacketMan.PacketOpen; if (! bStartedWithPacketOpen) pEd.StartOperation (); // Spustenie relácie úpravy mapy ICadastralMapEdit pCadMapEdit = (ICadastralMapEdit) pCadEd; pCadMapEdit.StartMapEdit (esriMapEditType.esriMEEmpty, "NewParcel", false); // Získať balík úloh ICadastralPacket pCadaPacket = pCadPacketMan.JobPacket; // Vytvorte reťazec plánu (nový) sPlanName = "Môj nový plán"; IGSPlan pGSPlan = null; pGSPlan = new GSPlanClass (); // nastavenie hodnôt pGSPlan.Accuracy = 4; pGSPlan.Name = sPlanName; // Pridajte plán do balíka úloh ICadastralPlan pCadaPlan = (ICadastralPlan) pCadaPacket; pCadaPlan.AddPlan (pGSPlan); // Vytvorenie balíka ICadastralParcel pCadaParcel = (ICadastralParcel) pCadaPacket; IGSParcel pNewGSParcel = new GSParcelClass (); // Zaistite, aby všetky rozšírené atribúty na balíku mali nastavené predvolené hodnoty IGSAttributes pGSAttributes = (IGSAttributes) pNewGSParcel; if (pGSAttributes! = null) {ICadastralObjectSetup pCadaObjSetup = (ICadastralObjectSetup) pParcEditorMan; pCadaObjSetup.AddExtendedAttributes (pGSAttributes); pCadaObjSetup.SetDefaultValues ​​(pGSAttributes); } // Pridajte balík do balíka. (urobte to pred pridaním riadkov) // To nám umožní získať ID balíka, // Keď je balík pripojený k paketu, umožní funkciu InsertLine. pCadaParcel.AddParcel (pNewGSParcel); pNewGSParcel.Lot = "NewParcel"; pNewGSParcel.Type = 7; // Nastaviť plán (vytvorený vyššie) IGSPlan thePlan = pCadaPlan.GetPlan (sPlanName); pNewGSParcel.Plan = thePlan; ICadastralPoints pCadaPoints = (ICadastralPoints) pCadaPacket; IMetricUnitConverter pMetricUnitConv = (IMetricUnitConverter) pCadEd; ISegmentCollection segmenty = polygonFeature.ShapeCopy ako ISegmentCollection; // prvý segmentový bod mnohouholníka ako začiatok ParFab var pPt1 = segmenty.get_Segment (0) .FromPoint; IZAware pZAw = (IZAware) pPt1; pZAw.ZAware = true; pPt1.Z = 0; // predvolené nastavenie 0 // Previesť bod na metrické jednotky a získať nový bod (in-mem) id IGSPoint pGSPointFrom = pMetricUnitConv.SetGSPoint (pPt1); pCadaPoints.AddPoint (pGSPointFrom); int iID_First_Last = pGSPointFrom.Id; int iID1 = iID_Prvna_posledna; int iID2 = -1; int index = 0; pre (int i = 0; i  0 alebo <0, potom je čiara kruhová krivka so vzdialenosťou ako dĺžkou tetivy // pre krivky Ložisko znamená ložisko akordu // záporný polomer znamená krivku vľavo, kladná krivka polomeru vpravo // bez presnosti, bez typu alebo bez kategórie, prechod v -1 // Ložisko je v severných azimutových radiánoch IGSLine pLine = nová GSLineClass (); pLine.Bearing = Smer; // smer je v radiánoch severný azimut dvojitý dConvertedDistance = 0; MetricConversion.ConvertDistance (esriCadastralUnitConversionType.esriCUCToMetric, Distance, ref dConvertedDistance); pLine.Distance = dConvertedDistance; // musí byť v metroch; if (Math.Abs ​​(Radius)> 0) {MetricConversion.ConvertDistance (esriCadastralUnitConversionType.esriCUCToMetric, Radius, ref dConvertedDistance); pLine.Radius = dConvertedDistance; // musí byť v metroch; } pLine.FromPoint = FromPointID; pLine.ToPoint = -1; if (Presnosť> -1) pLine.Accuracy = Presnosť; if (UserLineType> -1) pLine.LineType = UserLineType; if (Kategória> -1) pLine.Category = (ESRI.ArcGIS.GeoDatabaseExtensions.esriCadastralLineCategory) Kategória; // Uistite sa, že všetky rozšírené atribúty na riadku majú nastavené predvolené hodnoty IGSAttributes pGSAttributes = (IGSAttributes) pLine; if (pGSAttributes! = null) {ICadastralObjectSetup pCadaObjSetup = (ICadastralObjectSetup) MetricConversion; // QI pCadaObjSetup.AddExtendedAttributes (pGSAttributes); pCadaObjSetup.SetDefaultValues ​​(pGSAttributes); } // Vypočítajte nový koncový bod pre čiaru. // FromPointInToPointOut je v jednotkách projekcie mapy. ICurve pCurv = MetricConversion.GetSurveyedLine (pLine, CadastralPoints, false, FromPointInToPointOut); // pCurv je tiež v jednotkách projekcie mapy. Konvertujte koncový bod na metrické jednotky. FromPointInToPointOut = pCurv.ToPoint; // odovzdať nové Ak chcete poukázať späť FromPointInToPointOut.Z = 0; IGSPoint pGSPointTo = MetricConversion.SetGSPoint (FromPointInToPointOut); if (ComputeToPoint) {CadastralPoints.AddPoint (pGSPointTo); pLine.ToPoint = pGSPointTo.Id; ToPointID = pLine.ToPoint; } else ToPointID = -1; ak (pCurv je ICircularArc) {ICircularArc pCircArc = (ICircularArc) pCurv; IPoint pCtrPt = pCircArc.CenterPoint; IZAware pZAw = (IZAware) pCtrPt; pZAw.ZAware = true; pCtrPt.Z = 0; IGSPoint pGSCtrPt = MetricConversion.SetGSPoint (pCtrPt); CadastralPoints.AddPoint (pGSCtrPt); pLine.CenterPoint = pGSCtrPt.Id; } vrátiť pLine; } private double getBearing (IPoint fromPoint, IPoint toPoint) {ILine line = new LineClass (); line.PutCoords (fromPoint, toPoint); dvojitý uhol = priamka.Angle; návrat Math.PI / 2 - uhol; }}}

Pozri si video: ArcGIS - Parcel Fabric - Easy way to copy and paste polygons to parcel fabric