protected override void Execute() { var featureClass = FeatureWorkspace.OpenFeatureClass(Args.FeatureClass.Trim()); var errors = ValidateFields(featureClass, Args.ReturnValues); if (errors.Any()) { ErrorMessage = "{0} does not contain an attribute {1}. Check your spelling." .With(Args.FeatureClass, string.Join(" or ", errors)); return; } var filter = new QueryFilterClass { WhereClause = Args.WhereClause }; var fCursor = featureClass.Search(filter, true); var fields = featureClass.Fields; var container = AddResultsToContainer(fCursor, fields, Args.ReturnValues, Args.SpatialRefefence); Result = container; }
protected override void Execute() { IFeatureClass featureClass; try { featureClass = FeatureWorkspace.OpenFeatureClass(Args.FeatureClass.Trim()); } catch (COMException ex) { ErrorMessage = "{0} is not a spatial feature class and cannot be queried with a geometry. Result: {1}".With(Args.FeatureClass, ex.HResult); return; } var errors = ValidateFields(featureClass, Args.ReturnValues); if (errors.Any()) { ErrorMessage = "{0} does not contain an attribute {1}. Check your spelling." .With(Args.FeatureClass, string.Join(" or ", errors)); return; } if (Args.Shape == null) { ErrorMessage = "The point used to do the query appears to be invalid. Check the syntax point:[x,y]"; return; } var spatFilter = new SpatialFilterClass { SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = Args.WhereClause, Geometry = Args.Shape }; var fCursor = featureClass.Search(spatFilter, true); var fields = featureClass.Fields; var container = AddResultsToContainer(fCursor, fields, Args.ReturnValues, Args.SpatialRefefence); Marshal.ReleaseComObject(fields); Marshal.ReleaseComObject(spatFilter); Marshal.ReleaseComObject(featureClass); Marshal.ReleaseComObject(FeatureWorkspace); Result = container; }
/// <summary> /// code to execute when command is run. /// </summary> protected override void Execute() { IList <string> errors = new List <string>(); if (Args.Shape == null) { ErrorMessage = "To query a raster you must supply a shape"; return; } IGeometry point = null; if (Args.Shape.GeometryType == esriGeometryType.esriGeometryPoint) { point = Args.Shape; } else { var area = Args.Shape as IArea; if (area == null) { errors.Add("Could not get centroid from input geometry. Best results are with point geometry types."); } else { point = area.Centroid; } } if (errors.Any()) { ErrorMessage = "Could not complete operation. {0}".With(string.Join(", ", errors)); return; } var featureClass = FeatureWorkspace.OpenRasterDataset(Args.FeatureClass.Trim()); var rasterLayer = new RasterLayer(); rasterLayer.CreateFromDataset(featureClass); var table = rasterLayer as ITable; if (table == null) { ErrorMessage = "Could not complete operation. {0}".With("Accessing raster table."); return; } errors = ValidateFields(table, Args.ReturnValues); if (errors.Any()) { ErrorMessage = "{0} does not contain an attribute {1}. Check your spelling." .With(Args.FeatureClass, string.Join(" or ", errors)); return; } var identify = rasterLayer as IIdentify; if (identify == null) { ErrorMessage = "Could not complete operation. {0}".With("Identifying raster."); return; } var results = identify.Identify(point); if (results == null || results.Count < 1) { Result = new ResponseContainer <SearchResult> { Results = new List <SearchResult>() }; return; } var container = AddResultsToContainer(results, table.Fields, Args.ReturnValues, Args.SpatialRefefence); Marshal.ReleaseComObject(identify); Marshal.ReleaseComObject(table); Marshal.ReleaseComObject(rasterLayer); Marshal.ReleaseComObject(featureClass); Marshal.ReleaseComObject(FeatureWorkspace); Result = container; }