Exemple #1
0
        /// <summary>
        /// Calculates the combined grid result.
        /// </summary>
        /// <param name="calculationCoordinateSystemId">The calculation coordinate system id.</param>
        /// <param name="gridCellSize">Size of the grid cell.</param>
        /// <param name="wfsLayerId">The WFS layer id.</param>
        /// <returns>Combined grid cell statistics.</returns>
        public CombinedGridStatisticsResult CalculateCombinedGridResult(int calculationCoordinateSystemId, int gridCellSize, int wfsLayerId)
        {
            GridSpecification gridSpecification       = new GridSpecification();
            CoordinateSystem  displayCoordinateSystem = MySettings.Presentation.Map.DisplayCoordinateSystem;

            gridSpecification.GridCoordinateSystem    = (GridCoordinateSystem)calculationCoordinateSystemId;
            gridSpecification.GridCellSize            = gridCellSize;
            gridSpecification.IsGridCellSizeSpecified = true;
            gridSpecification.GridCellGeometryType    = GridCellGeometryType.Polygon;
            if (MySettings.Filter.Spatial.IsActive)
            {
                // Create bounding box from spatial filter
                ObservableCollection <DataPolygon> polygons = MySettings.Filter.Spatial.Polygons;
                if (polygons.Count > 0)
                {
                    BoundingBox      boundingBox                 = polygons.GetBoundingBox();
                    CoordinateSystem toCoordinateSystem          = CoordinateSystemHelper.GetCoordinateSystemFromGridCoordinateSystem(gridSpecification.GridCoordinateSystem);
                    IPolygon         convertedBoundingBoxPolygon = GisTools.CoordinateConversionManager.GetConvertedBoundingBox(boundingBox, MySettings.Filter.Spatial.PolygonsCoordinateSystem, toCoordinateSystem);
                    BoundingBox      convertedBoundingBox        = convertedBoundingBoxPolygon.GetBoundingBox();
                    gridSpecification.BoundingBox = convertedBoundingBox;
                }
            }

            WfsLayerSetting wfsLayer              = SessionHandler.MySettings.DataProvider.MapLayers.WfsLayers.FirstOrDefault(l => l.Id == wfsLayerId);
            string          featuresUrl           = "";
            string          featureCollectionJson = null;

            if (wfsLayer.IsFile)
            {
                featureCollectionJson = JObject.FromObject(MySettingsManager.GetMapDataFeatureCollection(UserContext, wfsLayer.GeometryName, gridSpecification.GridCoordinateSystem.GetCoordinateSystemId())).ToString();
            }
            else
            {
                if (string.IsNullOrEmpty(wfsLayer.Filter))
                {
                    featuresUrl = string.Format("{0}?service=wfs&version=1.1.0&request=GetFeature&typeName={1}",
                                                wfsLayer.ServerUrl, wfsLayer.TypeName);
                }
                else
                {
                    featuresUrl =
                        string.Format("{0}?service=wfs&version=1.1.0&request=GetFeature&typeName={1}&filter={2}",
                                      wfsLayer.ServerUrl, wfsLayer.TypeName, wfsLayer.Filter);
                }
            }
            var speciesObservationSearchCriteriaManager        = new SpeciesObservationSearchCriteriaManager(UserContext);
            SpeciesObservationSearchCriteria    searchCriteria = speciesObservationSearchCriteriaManager.CreateSearchCriteria(MySettings);
            IList <IGridCellCombinedStatistics> gridCells      = CoreData.AnalysisManager.GetGridCellFeatureStatisticsCombinedWithSpeciesObservationCounts(UserContext, gridSpecification, searchCriteria, null, featuresUrl, featureCollectionJson, displayCoordinateSystem);

            if (MySettings.Calculation.GridStatistics.GenerateAllGridCells)
            {
                gridCells = AddEmptyGridCells(gridCells, gridSpecification, displayCoordinateSystem);
                gridCells = RemoveGridCellsOutsideBounds(gridCells, gridSpecification);
            }

            gridCells = gridCells.OrderBy(x => x.Identifier).ToList();
            return(CombinedGridStatisticsResult.Create(
                       (CoordinateSystemId)calculationCoordinateSystemId, displayCoordinateSystem.Id, gridCellSize, gridCells));
        }
Exemple #2
0
        public RedirectToRouteResult WfsLayerEditorCreateNewLayer(string name, string filter, string serverUrl, string typeName, string color, bool useBbox)
        {
            var             viewManager = new WfsLayersViewManager(GetCurrentUser(), SessionHandler.MySettings);
            WfsLayerSetting wfsLayer    = viewManager.CreateNewWfsLayer(name, filter, serverUrl, typeName, color, useBbox);

            viewManager.AddWfsLayer(wfsLayer);
            return(RedirectToAction("WfsLayers"));
        }
Exemple #3
0
        public void UpdateWfsLayer(int id, string name, string filter, string color, bool useBbox)
        {
            WfsLayerSetting wfsLayerSetting = MapLayersSetting.GetWfsLayer(id);

            wfsLayerSetting.Filter = filter;
            wfsLayerSetting.Name   = name;
            wfsLayerSetting.Color  = color;
            wfsLayerSetting.UseSpatialFilterExtentAsBoundingBox = useBbox;
        }
        public void GetWfsFilterTest()
        {
            using (ShimsContext.Create())
            {
                DataController    dataProvidersController;
                JsonNetResult     result;
                JsonModel         jsonResult;
                WfsLayerViewModel wfsLayerResult;

                var layersSetting = new WfsLayerSetting
                {
                    Name         = "Småland & Östergötland",
                    GeometryType = GeometryType.Polygon,
                    Color        = "#CCCCFF",
                    Filter       = "<Filter><Or><PropertyIsEqualTo><PropertyName>LänSKOD</PropertyName><Literal>5</Literal></PropertyIsEqualTo><PropertyIsEqualTo><PropertyName>LänSKOD</PropertyName><Literal>6</Literal></PropertyIsEqualTo></Or></Filter>",
                    ServerUrl    = "http://slwgeo.artdata.slu.se:8080/geoserver/SLW/wfs",
                    TypeName     = "SLW:MapOfSwedishCounties",
                    GeometryName = "the_geom"
                };

                var layersSetting2 = new WfsLayerSetting
                {
                    Name         = "Blekinge",
                    GeometryType = GeometryType.Polygon,
                    Color        = "#336699",
                    Filter       = "<Filter><PropertyIsEqualTo><PropertyName>LänSKOD</PropertyName><Literal>10</Literal></PropertyIsEqualTo></Filter>",
                    ServerUrl    = "http://slwgeo.artdata.slu.se:8080/geoserver/SLW/wfs",
                    TypeName     = "SLW:MapOfSwedishCounties",
                    GeometryName = "the_geom"
                };

                dataProvidersController = new DataController();
                SessionHandler.MySettings.DataProvider.MapLayers = new MapLayersSetting();
                SessionHandler.MySettings.DataProvider.MapLayers.AddWfsLayer(layersSetting);
                SessionHandler.MySettings.DataProvider.MapLayers.AddWfsLayer(layersSetting2);
                int noOfWfsLayer = SessionHandler.MySettings.DataProvider.MapLayers.WfsLayers.Count;

                result         = dataProvidersController.GetWfsLayerSettings(noOfWfsLayer - 2);
                jsonResult     = (JsonModel)result.Data;
                wfsLayerResult = (WfsLayerViewModel)jsonResult.Data;

                Assert.IsTrue(jsonResult.Success);
                Assert.IsNotNull(wfsLayerResult);
                Assert.IsTrue(wfsLayerResult.Name.Equals(layersSetting.Name));
                Assert.IsTrue(wfsLayerResult.Filter.Equals(layersSetting.Filter));
                Assert.IsTrue(wfsLayerResult.ServerUrl.Equals(layersSetting.ServerUrl));
                Assert.IsTrue(wfsLayerResult.GeometryName.Equals(layersSetting.GeometryName));
                Assert.IsTrue(wfsLayerResult.Color.Equals(layersSetting.Color));
                Assert.IsTrue(wfsLayerResult.TypeName.Equals(layersSetting.TypeName));
                Assert.IsTrue(wfsLayerResult.GeometryType.Equals(layersSetting.GeometryType));
            }
        }
        // ReSharper disable once InconsistentNaming
        public void GetWfsFiltersAsGeoJSONTest()
        {
            ResultController         resultController;
            JsonNetResult            result;
            JsonModel                jsonResult;
            List <WfsLayerViewModel> wfsLayersResult;

            var layersSetting = new WfsLayerSetting
            {
                Name         = "Småland & Östergötland",
                GeometryType = GeometryType.Polygon,
                Color        = "#CCCCFF",
                Filter       = "<Filter><Or><PropertyIsEqualTo><PropertyName>LänSKOD</PropertyName><Literal>5</Literal></PropertyIsEqualTo><PropertyIsEqualTo><PropertyName>LänSKOD</PropertyName><Literal>6</Literal></PropertyIsEqualTo></Or></Filter>",
                ServerUrl    = "http://slwgeo.artdata.slu.se:8080/geoserver/SLW/wfs",
                TypeName     = "SLW:MapOfSwedishCounties",
                GeometryName = "the_geom"
            };

            var layersSetting2 = new WfsLayerSetting
            {
                Name         = "Blekinge",
                GeometryType = GeometryType.Polygon,
                Color        = "#336699",
                Filter       = "<Filter><PropertyIsEqualTo><PropertyName>LänSKOD</PropertyName><Literal>10</Literal></PropertyIsEqualTo></Filter>",
                ServerUrl    = "http://slwgeo.artdata.slu.se:8080/geoserver/SLW/wfs",
                TypeName     = "SLW:MapOfSwedishCounties",
                GeometryName = "the_geom"
            };

            resultController = new ResultController();
            SessionHandler.MySettings.DataProvider.MapLayers = new MapLayersSetting();
            SessionHandler.MySettings.DataProvider.MapLayers.AddWfsLayer(layersSetting);
            SessionHandler.MySettings.DataProvider.MapLayers.AddWfsLayer(layersSetting2);

            result          = resultController.GetWfsLayersAsJSON();
            jsonResult      = (JsonModel)result.Data;
            wfsLayersResult = (List <WfsLayerViewModel>)jsonResult.Data;

            Assert.IsTrue(jsonResult.Success);
            Assert.IsNotNull(wfsLayersResult);
            Assert.IsTrue(wfsLayersResult.Count >= 2);

            Assert.IsTrue(wfsLayersResult.Last().Id == layersSetting2.Id);
            Assert.IsTrue(wfsLayersResult.Last().Name.Equals(layersSetting2.Name));
            Assert.IsTrue(wfsLayersResult.Last().Filter.Equals(layersSetting2.Filter));
            Assert.IsTrue(wfsLayersResult.Last().ServerUrl.Equals(layersSetting2.ServerUrl));
            Assert.IsTrue(wfsLayersResult.Last().GeometryName.Equals(layersSetting2.GeometryName));
            Assert.IsTrue(wfsLayersResult.Last().Color.Equals(layersSetting2.Color));
            Assert.IsTrue(wfsLayersResult.Last().TypeName.Equals(layersSetting2.TypeName));
            Assert.IsTrue(wfsLayersResult.Last().GeometryType.Equals(layersSetting2.GeometryType));
        }
Exemple #6
0
        public WfsLayerSetting CreateNewWfsLayer(string name, string filter, string serverUrl, string typeName, string color, bool useBbox)
        {
            var wfsLayer = new WfsLayerSetting();

            wfsLayer.Filter    = filter;
            wfsLayer.Name      = name;
            wfsLayer.ServerUrl = serverUrl;
            wfsLayer.TypeName  = typeName;
            WFSDescribeFeatureType wfsDescribeFeatureType = WFSManager.GetWFSDescribeFeatureType(serverUrl, typeName);

            wfsLayer.GeometryName = wfsDescribeFeatureType.GeometryField.Name;
            wfsLayer.GeometryType = wfsDescribeFeatureType.GeometryType;
            wfsLayer.Color        = color;
            wfsLayer.UseSpatialFilterExtentAsBoundingBox = useBbox;
            return(wfsLayer);
        }
Exemple #7
0
        public WfsLayerSetting CreateNewWfsFileLayer(string layerName, string fileName, string typeName, string filter, string serverUrl, GeometryType geometryType, string color, bool useBbox)
        {
            var wfsLayer = new WfsLayerSetting
            {
                Color        = color,
                Filter       = filter,
                GeometryName = fileName,
                GeometryType = GeometryType.Polygon,
                IsFile       = true,
                Name         = layerName,
                ServerUrl    = serverUrl,
                TypeName     = typeName,
                UseSpatialFilterExtentAsBoundingBox = useBbox
            };

            return(wfsLayer);
        }
        //public string EditUrl { get; set; }

        public static WfsLayerViewModel Create(WfsLayerSetting wfsLayerSetting)
        {
            var layer = new WfsLayerViewModel
            {
                Id           = wfsLayerSetting.Id,
                Name         = wfsLayerSetting.Name,
                ServerUrl    = wfsLayerSetting.ServerUrl,
                TypeName     = wfsLayerSetting.TypeName,
                GeometryName = wfsLayerSetting.GeometryName,
                GeometryType = wfsLayerSetting.GeometryType,
                Filter       = wfsLayerSetting.Filter,
                Color        = wfsLayerSetting.Color,
                UseSpatialFilterExtentAsBoundingBox = wfsLayerSetting.UseSpatialFilterExtentAsBoundingBox,
                MediaName = wfsLayerSetting.IsFile ? Resource.SharedFile : Resource.SharedWfsService,
                IsFile    = wfsLayerSetting.IsFile
            };

            return(layer);
        }
Exemple #9
0
        /// <summary>
        /// Creates a view model to use in WfsLayerEditor when we create a new layer.
        /// </summary>
        /// <param name="url">The server URL.</param>
        /// <param name="typeName">The typename.</param>
        /// <param name="filter">The filter.</param>
        /// <returns></returns>
        public WfsLayerEditorViewModel CreateWfsLayerEditorViewModelInCreateNewMode(string url, string typeName, string filter)
        {
            WFSCapabilities wfsCapabilities = WFSManager.GetWFSCapabilitiesAndMergeDescribeFeatureType(url, typeName);

            ArtDatabanken.GIS.WFS.Capabilities.WfsFeatureType featureType = wfsCapabilities.FeatureTypes.FirstOrDefault(feature => feature.Name.FullName == typeName);

            var model = new WfsLayerEditorViewModel();

            model.Mode            = WfsLayerEditorMode.New;
            model.WfsCapabilities = wfsCapabilities;
            model.FeatureType     = featureType;
            model.ServerUrl       = wfsCapabilities.Capability.Requests.GetFeaturesRequest.GetUrlBase;
            var wfsLayerSetting = new WfsLayerSetting();

            wfsLayerSetting.Filter = "";
            wfsLayerSetting.Name   = "";
            wfsLayerSetting.Color  = MapLayersSetting.CreateMapLayerHexColor();
            model.WfsLayerSetting  = wfsLayerSetting;

            return(model);
        }
Exemple #10
0
        /// <summary>
        /// Gets feature collection based on selected WFS layer in SummaryStatistics.
        /// </summary>
        /// <returns>A feature collection or null.</returns>
        private FeatureCollection GetFeatureCollection()
        {
            if (!MySettings.Calculation.SummaryStatistics.WfsSummaryStatisticsLayerId.HasValue)
            {
                return(null);
            }

            int               wfsLayerId = MySettings.Calculation.SummaryStatistics.WfsSummaryStatisticsLayerId.Value;
            WfsLayerSetting   wfsLayer   = MySettings.DataProvider.MapLayers.WfsLayers.FirstOrDefault(l => l.Id == wfsLayerId);
            string            featuresUrl;
            string            srsName           = MySettings.Presentation.Map.PresentationCoordinateSystemId.EpsgCode();
            FeatureCollection featureCollection = null;

            if (wfsLayer.IsFile)
            {
                featureCollection = MySettingsManager.GetMapDataFeatureCollection(
                    UserContext,
                    wfsLayer.GeometryName,
                    MySettings.Presentation.Map.PresentationCoordinateSystemId);
            }
            else
            {
                if (string.IsNullOrEmpty(wfsLayer.Filter))
                {
                    featuresUrl =
                        string.Format("{0}?service=wfs&version=1.1.0&request=GetFeature&typeName={1}&srsName={2}",
                                      wfsLayer.ServerUrl, wfsLayer.TypeName, srsName);
                }
                else
                {
                    featuresUrl =
                        string.Format(
                            "{0}?service=wfs&version=1.1.0&request=GetFeature&typeName={1}&filter={2}&srsName={3}",
                            wfsLayer.ServerUrl, wfsLayer.TypeName, wfsLayer.Filter, srsName);
                }
                featureCollection = WFSManager.GetWfsFeaturesUsingHttpPost(featuresUrl);
            }

            return(featureCollection);
        }
        public void Changes_that_not_trigger_cache_refresh()
        {
            MySettings mySettings = new MySettings();

            mySettings.ResultCacheNeedsRefresh = false;
            MySettings oldMySettings = ObjectCopier.Clone(mySettings);

            // Changes to presentation map doesn't trigger cache refresh
            Assert.IsTrue(mySettings.Presentation.Map.IsActive);
            Assert.IsTrue(oldMySettings.Presentation.Map.IsActive);
            mySettings.Presentation.Map.IsActive = false;
            Assert.IsFalse(mySettings.Presentation.Map.ResultCacheNeedsRefresh);
            Assert.IsFalse(mySettings.Presentation.ResultCacheNeedsRefresh);
            Assert.IsFalse(mySettings.ResultCacheNeedsRefresh);


            // Changes to presentation table doesn't trigger cache refresh
            Assert.IsTrue(mySettings.Presentation.Table.IsActive);
            Assert.IsTrue(oldMySettings.Presentation.Table.IsActive);
            mySettings.Presentation.Table.IsActive = false;
            Assert.IsFalse(mySettings.Presentation.Table.ResultCacheNeedsRefresh);
            Assert.IsFalse(mySettings.Presentation.ResultCacheNeedsRefresh);
            Assert.IsFalse(mySettings.ResultCacheNeedsRefresh);


            // Changes to map layers doesn't trigger cache refresh
            Assert.IsFalse(mySettings.DataProvider.MapLayers.IsActive);
            Assert.IsFalse(oldMySettings.DataProvider.MapLayers.IsActive);
            mySettings.DataProvider.MapLayers.IsActive = true;
            WfsLayerSetting wfsLayer = new WfsLayerSetting();

            wfsLayer.Name = "Test";
            wfsLayer.Id   = 0;
            mySettings.DataProvider.MapLayers.WfsLayers.Add(wfsLayer);
            Assert.IsFalse(mySettings.DataProvider.MapLayers.ResultCacheNeedsRefresh);
            Assert.IsFalse(mySettings.DataProvider.ResultCacheNeedsRefresh);
            Assert.IsFalse(mySettings.ResultCacheNeedsRefresh);
        }
Exemple #12
0
 public void AddWfsLayer(WfsLayerSetting wfsLayer)
 {
     MapLayersSetting.AddWfsLayer(wfsLayer);
 }