Example #1
0
        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;
        }
Example #2
0
        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;
        }