internal static bool HasRelationship(this ArcGIS.Core.Geometry.IGeometryEngine engine, ArcGIS.Core.Geometry.Geometry geom1, ArcGIS.Core.Geometry.Geometry geom2, ArcGIS.Core.Data.SpatialRelationship relationship) { switch (relationship) { case ArcGIS.Core.Data.SpatialRelationship.Intersects: return(engine.Intersects(geom1, geom2)); case ArcGIS.Core.Data.SpatialRelationship.IndexIntersects: return(engine.Intersects(geom1, geom2)); case ArcGIS.Core.Data.SpatialRelationship.EnvelopeIntersects: return(engine.Intersects(geom1.Extent, geom2.Extent)); case ArcGIS.Core.Data.SpatialRelationship.Contains: return(engine.Contains(geom1, geom2)); case ArcGIS.Core.Data.SpatialRelationship.Crosses: return(engine.Crosses(geom1, geom2)); case ArcGIS.Core.Data.SpatialRelationship.Overlaps: return(engine.Overlaps(geom1, geom2)); case ArcGIS.Core.Data.SpatialRelationship.Touches: return(engine.Touches(geom1, geom2)); case ArcGIS.Core.Data.SpatialRelationship.Within: return(engine.Within(geom1, geom2)); } return(false);//unknown relationship }
protected override Task <bool> OnSketchCompleteAsync(ArcGIS.Core.Geometry.Geometry geometry) { //Simple check for selected layer if (MappingModule.ActiveTOC.SelectedLayers.Count == 0) { System.Windows.MessageBox.Show("Select a layer in the toc"); return(Task.FromResult(true)); } //jump to CIM thread return(QueuedTask.Run(async() => { //Get the selected layer in toc var featLayer = MappingModule.ActiveTOC.SelectedLayers[0] as FeatureLayer; //find feature oids under the sketch for the selected layer var features = await MapView.Active.HitTestAsync(geometry, CancelableProgressor.None); var featOids = features.Where(x => x.Item1 == featLayer).Select(x => x.Item2).First(); //update the attributes of those features var fi = new FeatureInspector(true); await fi.FillAsync(featLayer, featOids); await fi.Attributes.Where(a => a.FieldName == "PARCEL_ID").First().SetValueAsync(42); //create and execute the edit operation var op = new EditOperation(); op.Name = "The ultimate answer"; op.SelectModifiedFeatures = true; op.SelectNewFeatures = false; op.Modify(fi); return await op.ExecuteAsync(); })); }
protected override Task <bool> OnSketchCompleteAsync(ArcGIS.Core.Geometry.Geometry geometry) { //Simple check for selected layer if (MapView.Active.GetSelectedLayers().Count == 0) { MessageBox.Show("Please select a layer in the toc", "Update attributes with sketch"); return(Task.FromResult(true)); } //Run on MCT return(QueuedTask.Run(() => { //Get the selected layer in toc var featLayer = MapView.Active.GetSelectedLayers().First() as FeatureLayer; //find feature oids under the sketch for the selected layer var features = MapView.Active.GetFeatures(geometry); var featOids = features[featLayer]; //update the attributes of those features var insp = new Inspector(); insp.Load(featLayer, featOids); insp["PARCEL_ID"] = 42; //create and execute the edit operation var op = new EditOperation(); op.Name = "Update parcel"; op.SelectModifiedFeatures = true; op.SelectNewFeatures = false; op.Modify(insp); return op.Execute(); })); }
public PickableFeatureClassItem(FeatureClass featureClass, esriGeometryType geometryType, List <FeatureLayer> belongingFeatureLayers) { _itemText = featureClass.GetName(); _geometry = null; _itemImageUri = GetImagePath(geometryType); BelongingFeatureLayers = belongingFeatureLayers; }
/// <summary> /// Performs a spatial query against the table/feature class. /// </summary> /// <remarks>It is assumed that the feature class and the search geometry are using the same spatial reference.</remarks> /// <param name="searchTable">The table/feature class to be searched.</param> /// <param name="searchGeometry">The geometry used to perform the spatial query.</param> /// <param name="spatialRelationship">The spatial relationship used by the spatial filter.</param> /// <returns></returns> public static RowCursor Search(this Table searchTable, Geometry searchGeometry, SpatialRelationship spatialRelationship) { // define a spatial query filter ArcGIS.Core.Data.SpatialQueryFilter spatialQueryFilter = new ArcGIS.Core.Data.SpatialQueryFilter(); // pasing the search geometry to the spatial filter spatialQueryFilter.FilterGeometry = searchGeometry; // define the spatial relationship between search geometry and feature class spatialQueryFilter.SpatialRelationship = spatialRelationship; // apply the spatial filter to the feature class in question return(searchTable.Search(spatialQueryFilter)); }
public static SpatialQueryFilter CreateSpatialFilter( [NotNull] ArcGIS.Core.Geometry.Geometry filterGeometry, SpatialRelationship spatialRelationship = SpatialRelationship.Intersects, SearchOrder searchOrder = SearchOrder.Spatial) { Assert.ArgumentNotNull(filterGeometry, nameof(filterGeometry)); return(new SpatialQueryFilter { FilterGeometry = filterGeometry, SpatialRelationship = spatialRelationship, SearchOrder = searchOrder }); }
/// <summary> /// Called when the sketch is finished. /// </summary> protected override async Task <bool> OnSketchCompleteAsync(ArcGIS.Core.Geometry.Geometry geometry) { // Clear any previous selection using the built-in Pro button/command // TRICKY: Must be called here before the QueuedTask so runs on Main UI Thread ProSymbolUtilities.ClearMapSelection(); return(await QueuedTask.Run(() => { //Return all the features that intersect the sketch geometry var result = MapView.Active.GetFeatures(geometry); if ((result != null) && (result.Count > 0)) { MapView.Active.SelectFeatures(geometry, SelectionCombinationMethod.New); } return true; })); }
/// <summary> /// Called when the sketch is finished. /// </summary> protected override async Task <bool> OnSketchCompleteAsync(ArcGIS.Core.Geometry.Geometry geometry) { //Get the instance of the ViewModel from the dock pane var featureSelVM = Module1.FeatureSelectionVM; if (featureSelVM == null || featureSelVM.SelectedLayer == null) { return(true); } return(await QueuedTask.Run(() => { //Return all the features that intersect the sketch geometry var result = MapView.Active.GetFeatures(geometry); var layerSelection = result.FirstOrDefault(kvp => kvp.Key == featureSelVM.SelectedLayer); //Clear the selection if no features where returned if (!result.ContainsKey(featureSelVM.SelectedLayer)) { featureSelVM.SelectedLayer.Select(null, SelectionCombinationMethod.Subtract); return true; } //Construct a query filter using the OIDs of the features that intersected the sketch geometry var oidList = result[featureSelVM.SelectedLayer]; var oid = featureSelVM.SelectedLayer.GetTable().GetDefinition().GetObjectIDField(); var qf = new ArcGIS.Core.Data.QueryFilter() { WhereClause = string.Format("({0} in ({1}))", oid, string.Join(",", oidList)) }; //Add to the clause using the where clause specified in the dock pane. if (featureSelVM.WhereClause != "" && featureSelVM.WhereClause != null) { qf.WhereClause += string.Format(" AND ({0})", featureSelVM.WhereClause); } //Return if the expression is not valid. if (!featureSelVM.ValidateExpresion(false)) { return true; } //Change the method depending on the hot keys that are pressed. var method = SelectionCombinationMethod.New; if (_ctrlPressed && _shiftPressed) { method = SelectionCombinationMethod.And; } else if (_ctrlPressed) { method = SelectionCombinationMethod.Subtract; } else if (_shiftPressed) { method = SelectionCombinationMethod.Add; } try { //Create the new selection featureSelVM.SelectedLayer.Select(qf, method); } catch (Exception) {} //May occur if expression validates but is still invalid expression. return true; })); }