Daha çox

Arcobject'lərdə kəsişən "alınmır" xüsusiyyətləri necə əldə edilir?


İki xüsusiyyət sinifim var. Hər ikisini də kəsişirəm. Digəri ilə kəsişməyən xüsusiyyətləri qaytarmalıyam. Nümunə götürək. İki xüsusiyyət sinifim var: kəndlər və kolleclər. Hər ikisini də kəsişirəm. Sorğum "Əhalisinin 500-dən çox olduğu və kolleci olmayan kəndləri seçin." Beləliklə, "o zaman daha çox əhaliyə sahib olan" kəndlər yaxşı işləyir, lakin sonra bu kəndlərdə kollec axtarır. ehtiyacım olan kolleci olmayan kəndləri seçməkdir.

public ArrayList Attributespatialquery (String StrTableA, String StrTableB, String Vcode, String GISColumn, String SDE) {string TableA, TableB; ESRI.ArcGIS.RuntimeManager.Bind (ESRI.ArcGIS.ProductCode.Desktop); AoInitialize initA = yeni AoInitialize (); IWorkspaceFactory pworkspaceFactory = boş; IWorkspace pworkspace = boş; ESRI.ArcGIS.Geodatabase.IFeatureWorkspace pfeatureWorkspace = boş; ESRI.ArcGIS.Geodatabase.IFeatureClass TableBfeatureClass = sıfır; ESRI.ArcGIS.Geodatabase.IFeatureClass TableAfeatureClass = boş; IFeatureCursor pFeatCusr = sıfır; IFeatureCursor pFeatCusr1 = sıfır; IFeature pFeature = sıfır; IFeature pFeature1 = sıfır; //System.Data.SqlClient.SqlConnection con = yeni System.Data.SqlClient.SqlConnection (); //System.Data.DataSet verilənlər bazası = yeni System.Data.DataSet (); //// MyConnection objCon = yeni MyConnection (System.Configuration.ConfigurationManager.ConnectionStrings ["DBConnectionGIS"]. ToString ()); //con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings ["DBConnectionGIS"]. ToString (); {// lisenziyanın mövcud olduğu təqdirdə ArcGIS Server lisenziyasını başlatın (initA.IsProductCodeAvailable (esriLicenseProductCode.esriLicenseProductCodeStandard) == esriLicenseStatus.esriLicenseAvailable) initA.Initialize (esriLicenseProductCode.esriicense) // lisenziya yoxdursa bir istisna atın, başqa bir istisna atın ("ESRI ArcGIS Server Lisenziyası mövcud deyil və ya uğursuz oldu"); Type factoryType = Type.GetTypeFromProgID ("esriDataSourcesGDB.SdeWorkspaceFactory"); pworkspaceFactory = (IWorkspaceFactory) Activator.CreateInstance (factoryType); pworkspace = pworkspaceFactory.OpenFromFile (SDE, 0); pfeatureWorkspace = (IFeatureWorkspace) iş sahəsi; TableA = "dbo." + StrTableA; // Explict Cast TableAfeatureClass = pfeatureWorkspace.OpenFeatureClass (TableA); TableB = "dbo." + StrTableB; // Explict Cast TableBfeatureClass = pfeatureWorkspace.OpenFeatureClass (TableB); IQueryFilter pQueryFilter = yeni QueryFilterClass (); pQueryFilter.SubFields = "*"; pQueryFilter.WhereClause = GISColumn + "in (" + Vcode + ")"; pFeatCusr = TableAfeatureClass.Search (pQueryFilter, false); while ((pFeature = pFeatCusr.NextFeature ())! = null) {ISpatialFilter spatialFilter = yeni SpatialFilterClass (); spatialFilter.Geometry = pFeature.Shape; spatialFilter.GeometryField = TableAfeatureClass.ShapeFieldName; spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; pFeatCusr1 = TableBfeatureClass.Search (spatialFilter, false); while ((pFeature1 = pFeatCusr1.NextFeature ())! = null) if (! arrSpatial.Contains (pFeature1)) {arrSpatial.Add (pFeature1.OID); // WriteLog ("dəyərlər əlavə edildi"); }}

Axtarış ilə bir 'seçim seçimi' edə bilməzsiniz, istifadə etməyiniz lazım olanı seçin, sonra ISelectionSet.Combine ilə inkar edə / dəyişə biləcəyiniz seçin və sonra ISelectionSet.Search istifadə edərək bir imlecə çevirin (əvvəl imlec olmalıdır):

// sorğularınızı bir SelectionSet ISelectionSet pSatisfiesQuery = pFeatureClass.Select (pQueryFilter, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, null); ISelectionSet pSatisfiesGeom = pFeatureClass.Select (spatialFilter, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, null); // bəzi boş dəstlər ISelectionSet pResultset = pFeatureClass.Select (null, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionEmpty, null); ISelectionSet pDiffSet = pFeatureClass.Select (null, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionEmpty, null); ISelectionSet pEmptySet = pFeatureClass.Select (null, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionEmpty, null); // indi seçilmiş pSatisfiesQuery.Combine (pSatisfiesGeom, esriSetOperation.esriSetIntersection, out pResultset) arasından seçin; // indi seçimi dəyişdirin pResultset.Combine (pEmptySet, esriSetOperation.esriSetDifference, out pDiffSet); IFeatureCursor pFeatCusr1; pDiffSet.Search (sıfır, doğru, pFeatCusr1); // seçim dəstini xüsusiyyət imlecinə çevirin

Normalda bunu kod bloğunuzun kontekstində qoyurdum, ancaq sizininkiniz xüsusilə uzundur və dəyişdirilmiş xətləri qaçıracağınızdan qorxuram.


Videoya baxın: çevrə, radius, diametr, vətər, toxunan, kəsən, daxili bucaq, mərkəzi bucaq (Oktyabr 2021).