private void SearchAsync(IEnumerable <LayerInfo> layerInfos, SearchRegion region, MultiDimensionalObjectRelationship relationship) { btnSearch.Enabled = false; btnSearch.Text = @"Searching..."; var searchWorker = new BackgroundWorker(); searchWorker.DoWork += SearchWorker_DoWork; searchWorker.RunWorkerCompleted += SearchWorker_RunWorkerCompleted; _timer.Restart(); searchWorker.RunWorkerAsync(Tuple.Create(layerInfos, region, relationship, rdoSearchByGeom.Checked)); }
private static FeatureSet SpatialSearch <TMdo, TVal>(JoobRTree <TMdo, TVal> rtree, string name, FeatureType type, SearchRegion region, MultiDimensionalObjectRelationship relationship, out long searchTime) where TMdo : JoobObject, IMultiDimensionalObject where TVal : JoobObject { if (rtree.Count > 0) { var projection = ProjectionInfo.FromProj4String(SRID_WGS84); projection.Transform = new Transform(); var featureSet = new FeatureSet(type) { Name = name, Projection = projection }; var watch = new Stopwatch(); watch.Start(); var result = region == null ? rtree.Where(item => item as ObjectWithSpatialInfo != null).Cast <ObjectWithSpatialInfo>().Select(item => item.Geom).ToList() : rtree.Search(region.Envelope as TMdo, relationship).Select(item => item.Key as JoobGeometry).ToList(); watch.Stop(); searchTime = watch.ElapsedMilliseconds; PopulateFeatureSet(result, featureSet); return(featureSet); } searchTime = 0; return(null); }
private static FeatureSet SpatialSearchOtherSpatialLayers(string layerName, SearchRegion region, MultiDimensionalObjectRelationship relationship, out long searchTime) { var layer = TheRoot.OtherSpatialLayers[layerName]; if (layer != null) { var projection = ProjectionInfo.FromProj4String(SRID_None); projection.Transform = new Transform(); var featureSet = new FeatureSet(FeatureType.Unspecified) { Name = layerName, Projection = projection }; var watch = new Stopwatch(); watch.Start(); var result = region == null?layer.Geometries.Cast <JoobGeometry>().ToList() : layer.Geometries.Search(region.Envelope, relationship).Select(item => item.Key); watch.Stop(); searchTime = watch.ElapsedMilliseconds; PopulateFeatureSet(result, featureSet); return(featureSet); } searchTime = 0; return(null); }
public static IEnumerable <FeatureSet> SpatialSearch(IEnumerable <LayerInfo> layerInfos, SearchRegion region, MultiDimensionalObjectRelationship relationship, out long totalSearchTime) { totalSearchTime = 0; var result = new List <FeatureSet>(); foreach (var info in layerInfos) { long searchTime; if (info.Name.Equals(FeatureTypeStates, StringComparison.OrdinalIgnoreCase)) { var featureSet = SpatialSearch(TheRoot.AllStatesByGeom, info.Name, FeatureType.Polygon, region, relationship, out searchTime); if (featureSet != null) { result.Add(featureSet); } } else if (info.Name.Equals(FeatureTypeCounties, StringComparison.OrdinalIgnoreCase)) { var featureSet = SpatialSearch(TheRoot.AllCountiesByGeom, info.Name, FeatureType.Polygon, region, relationship, out searchTime); if (featureSet != null) { result.Add(featureSet); } } else if (info.Name.Equals(FeatureTypeCities, StringComparison.OrdinalIgnoreCase)) { var featureSet = SpatialSearch(TheRoot.AllCitiesByGeom, info.Name, FeatureType.Point, region, relationship, out searchTime); if (featureSet != null) { result.Add(featureSet); } } else { var layer = SpatialSearchOtherSpatialLayers(info.Name, region, relationship, out searchTime); if (layer != null) { result.Add(layer); } } totalSearchTime += searchTime; } return(result); }