public static IEnumerable <IFeature> QueryFeatures(this ILayer layer, SpatialQueryOperation operation, object param, double tol)
 {
     if (operation == SpatialQueryOperation.Point)
     {
         var pos = (Vector)param;
         return(PointQuery(layer, pos, tol));
     }
     else if (operation == SpatialQueryOperation.Window)
     {
         var extents = (Extents)param;
         return(WindowQuery(layer, extents));
     }
     else if (operation == SpatialQueryOperation.Cross)
     {
         var extents = (Extents)param;
         return(CrossQuery(layer, extents));
     }
     return(null);
 }
 public static IEnumerable <IFeature> QueryFeatures(this Map map, SpatialQueryOperation operation, object param, double tol)
 {
     return(map.Layers.SelectMany(layer => MapQueryServices.QueryFeatures(layer, operation, param, tol)));
 }
 public static ILookup <ILayer, IFeature> QueryFeaturesGroupedByLayer(this Map map, SpatialQueryOperation operation, object param, double tol)
 {
     return(map.Layers.ToLookup(
                keySelector: layer => layer,
                valuesSelector: layer => layer.QueryFeatures(operation, param, tol)));
 }