Daha çox

Mövcud bağlama xüsusiyyətlərindən Parsel Parça içərisinə yeni bir bağlama necə əlavə etmək olar (ArcObjects)


Parça parça qatında yeni bir bağlama yaratmaq istəyirəm. Yaranacaq bağlamalar üçün x, y koordinatlarım var. Çox axtardım və əslində bağlama "YARADAN" heç nə tapmadım.

İndiyə qədər sınadığım şey budur:

IPointCollection pts = feat.ShapeCopy kimi IPointCollection; // x, y, z kopyalamaq üçün istifadə olunan başqa bir xüsusiyyət sinifindən var olan çoxbucaqlı… ICadastralPoints cadPoints = new CadastralPacketClass (); for (int i = 0; i 

Ümid edirəm kimsə məni doğru yola yönəldər.


Xəritədə bir bağlama parça qatının olduğundan əmin olun və redaktəyə başladınız. Hələ yoxsa, aşağıdakı məclisləri layihənizə əlavə edin.

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

Xəritədə seçilmiş bir bağlama xüsusiyyətindən bir bağlama parça obyekti yaratmaq üçün aşağıdakı sinifdən və metodlarından istifadə edin. Metodlar sınaqdan keçirilir, ancaq bir səhv taparsanız, mənə bildirin.

//@FaridCher at GIS.StackExchange //, ESRI.ArcGIS.CadastralUI istifadə edərək xüsusi icazə olmadan kopyalana və/və ya paylana bilər; ESRI.ArcGIS.Editor istifadə edərək; ESRI.ArcGIS.esriSystem istifadə edərək; ESRI.ArcGIS.Geodatabase istifadə edərək; ESRI.ArcGIS.GeoDatabaseExtensions istifadə edərək; ESRI.ArcGIS.Geometry istifadə edərək; ESRI.ArcGIS.GeoSurvey istifadə edərək; Sistemdən istifadə; System.Collections.Generic istifadə edərək; System.Linq istifadə edərək; System.Runtime.InteropServices istifadə; System.Text istifadə edərək; System.Windows.Forms istifadə edərək; ad sahəsi MyParcelFabric {class CreateParcelFabric_FromPolygonSelection {protected overoid over void OnClick () {var enums = ArcMap.Document.ActiveView.FocusMap.FeatureSelection as IEnumFeature; IFeature feat = enums.Next (); if (feat == null) {qayıt; } CreateParcelFabric (feat); } şəxsi boşluq CreateParcelFabric (IFeature polygonFeature) {cəhd edin {UID pUID = yeni 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 ("esri obyekt redaktoru"); if (pEd.EditState == esriEditState.esriStateNotEditing) {MessageBox.Show ("Zəhmət olmasa redaktəyə başlayın və yenidən cəhd edin."); qayıtmaq; } ICadastralPacketManager pCadPacketMan = (ICadastralPacketManager) pCadEd; bool bStartedWithPacketOpen = pCadPacketMan.PacketOpen; if (! bStartedWithPacketOpen) pEd.StartOperation (); // Xəritənin redaktə sessiyasına başlayın ICadastralMapEdit pCadMapEdit = (ICadastralMapEdit) pCadEd; pCadMapEdit.StartMapEdit (esriMapEditType.esriMEEmpty, "NewParcel", yalan); // İş paketi alın ICadastralPacket pCadaPacket = pCadPacketMan.JobPacket; // Plan (yeni) simli yaradın sPlanName = "Yeni Planım"; IGSPlan pGSPlan = sıfır; pGSPlan = yeni GSPlanClass (); // dəyərləri təyin edin pGSPlan.Accuracy = 4; pGSPlan.Name = sPlanName; // Planı iş paketinə əlavə edin ICadastralPlan pCadaPlan = (ICadastralPlan) pCadaPacket; pCadaPlan.AddPlan (pGSPlan); // Parsel ICadastralParcel pCadaParcel = (ICadastralParcel) pCadaPacket; IGSParcel pNewGSParcel = yeni GSParcelClass (); // Paketdəki hər hansı bir genişləndirilmiş atributun IGSAttributes pGSAttributes = (IGSAttributes) pNewGSParcel; if (pGSAttributes! = null) {ICadastralObjectSetup pCadaObjSetup = (ICadastralObjectSetup) pParcEditorMan; pCadaObjSetup.AddExtendedAttributes (pGSAttributes); pCadaObjSetup.SetDefaultValues ​​(pGSAttributes); } // Paketi pakete əlavə edin. (bunu əlavə xətlərindən əvvəl edin) // Bu, paket ID -ni əldə etməyimizə imkan verəcək, // Paketin paketə əlavə edilməsi InsertLine -in işləməsinə imkan verir. pCadaParcel.AddParcel (pNewGSParcel); pNewGSParcel.Lot = "NewParcel"; pNewGSParcel.Type = 7; // Plan qurun (yuxarıda yaradılmışdır) IGSPlan thePlan = pCadaPlan.GetPlan (sPlanName); pNewGSParcel.Plan = plan; ICadastralPoints pCadaPoints = (ICadastralPoints) pCadaPacket; IMetricUnitConverter pMetricUnitConv = (IMetricUnitConverter) pCadEd; ISegmentCollection seqmentləri = polygonFeature.ShapeCopy kimi ISegmentCollection; // ParFabın başlanğıcı olaraq poliqonun ilk seqment nöqtəsi var pPt1 = segments.get_Segment (0) .FromPoint; IZAware pZAw = (IZAware) pPt1; pZAw.ZAware = doğru; pPt1.Z = 0; // 0-a defolt olaraq // Nöqtəni metrik vahidlərə çevirin və yeni (yaddaşda) bir nöqtə id əldə edin IGSPoint pGSPointFrom = pMetricUnitConv.SetGSPoint (pPt1); pCadaPoints.AddPoint (pGSPointFrom); int iID_First_Last = pGSPointFrom.Id; int iID1 = iID_First_Last; int iID2 = -1; int indeksi = 0; for (int i = 0; i  0 və ya <0 olarsa, xətt akkord uzunluğu kimi Məsafə olan dairəvi bir əyridir // əyrilər üçün Rulman akkord daşıyıcısı deməkdir // mənfi radius əyri deməkdir sola, müsbət radius əyrisi sağa // dəqiqlik, tip və ya kateqoriya keçməməsi üçün -1 // rulman şimal azimut radianlarında IGSLine pLine = yeni GSLineClass (); pLine.Bearing = İstiqamət; // istiqamət radianlarda şimal azimut ikiqat dConvertedDistance = 0; MetricConversion.ConvertDistance (esriCadastralUnitConversionType.esriCUCToMetric, Distance, ref dConvertedDistance); pLine.Distance = dConvertedDistance; // metrlərlə olmalıdır; if (Math.Abs ​​(Radius)> 0) {MetricConversion.ConvertDistance (esriCadastralUnitConversionType.esriCUCToMetric, Radius, ref dConvertedDistance); pLine.Radius = dConvertedDistance; // metrlərlə olmalıdır; } pLine.FromPoint = FromPointID; pLine.ToPoint = -1; əgər (Dəqiqlik> -1) pLine.Accuracy = Dəqiqlik; əgər (UserLineType> -1) pLine.LineType = UserLineType; əgər (Kateqoriya> -1) pLine.Category = (ESRI.ArcGIS.GeoDatabaseExtensions.esriCadastralLineCategory) Kateqoriya; // Xəttdə uzadılmış hər hansı bir atributun standart dəyərlərinin IGSAttributes pGSAttributes = (IGSAttributes) pLine olaraq təyin olunduğundan əmin olun; if (pGSAttributes! = null) {ICadastralObjectSetup pCadaObjSetup = (ICadastralObjectSetup) MetricConversion; // QI pCadaObjSetup.AddExtendedAttributes (pGSAttributes); pCadaObjSetup.SetDefaultValues ​​(pGSAttributes); } // Xəttin yeni son nöqtəsini hesablayın. // FromPointInToPointOut, xəritə proyeksiyasının vahidlərindədir. ICurve pCurv = MetricConversion.GetSurveyedLine (pLine, KadastralPoints, yalan, FromPointInToPointOut); // pCurv də xəritə proyeksiyasının vahidlərindədir. Son nöqtəni metrik vahidlərə çevirin. FromPointInToPointOut = pCurv.ToPoint; // yeni keçmək FromPointInToPointOut.Z = 0 -ı geri çəkmək üçün; IGSPoint pGSPointTo = MetricConversion.SetGSPoint (FromPointInToPointOut); if (ComputeToPoint) {CadastralPoints.AddPoint (pGSPointTo); pLine.ToPoint = pGSPointTo.Id; ToPointID = pLine.ToPoint; } başqa ToPointID = -1; əgər (pCurv ICircularArc) {ICircularArc pCircArc = (ICircularArc) pCurv; IP nöqtəsi pCtrPt = pCircArc.CenterPoint; IZAware pZAw = (IZAware) pCtrPt; pZAw.ZAware = doğru; pCtrPt.Z = 0; IGSPoint pGSCtrPt = MetricConversion.SetGSPoint (pCtrPt); CadastralPoints.AddPoint (pGSCtrPt); pLine.CenterPoint = pGSCtrPt.Id; } qayıt pLine; } xüsusi ikiqat getBearing (IPoint fromPoint, IPoint toPoint) {ILine line = yeni LineClass (); line.PutCoords (fromPoint, toPoint); ikiqat bucaq = xəttin açısı; qayıt Math.PI / 2 - bucaq; }}}


Videoya baxın: Fiziki şəxsin fəaliyyətinin dayandırılması (Sentyabr 2021).