public bool AddProjectLayer(int Project, ResTBPostGISType resTBPostGISType)
        {
            ResTBPostGISLayer resTBPostGISLayer = new ResTBPostGISLayer();
            bool visibleAtStartup = false;

            switch (resTBPostGISType)
            {
            case ResTBPostGISType.Perimeter:
                resTBPostGISLayer = new ResTBPerimeterLayer(Project);
                visibleAtStartup  = true;
                break;

            case ResTBPostGISType.MitigationMeasure:
                resTBPostGISLayer = new ResTBMitigationMeasureLayer(Project);
                break;

            case ResTBPostGISType.DamagePotential:
                resTBPostGISLayer = new ResTBDamagePotentialLayer(Project);
                break;

            case ResTBPostGISType.ResilienceBefore:
                resTBPostGISLayer = new ResTBResilienceLayer(Project, true);
                break;

            case ResTBPostGISType.ResilienceAfter:
                resTBPostGISLayer = new ResTBResilienceLayer(Project, false);
                break;

            case ResTBPostGISType.RiskMap:
                resTBPostGISLayer = new ResTBRiskMapLayer(Project);
                break;

            case ResTBPostGISType.RiskMapAfter:
                resTBPostGISLayer = new ResTBRiskMapLayer(Project, false);
                break;
            }

            return(AddProjectLayer(resTBPostGISLayer, visibleAtStartup));
        }
Exemple #2
0
        public static LayersModel CreateLayersModel(List <ILayer> layers, LayersModel selectedLayer, ObservableCollection <LayersModel> oldModel = null)
        {
            LayersModel allLayers  = new LayersModel(Resources.Layers);
            LayersModel projects   = new LayersModel(Resources.Project_Layers);
            LayersModel rasters    = new LayersModel(Resources.Rasters);
            LayersModel hazardMaps = new LayersModel(Resources.Hazard_Map);
            LayersModel resilience = new LayersModel(Resources.Resilience);
            LayersModel riskmap    = new LayersModel(Resources.RiskMap);

            ObservableCollection <ILayer> orderedLayers = new ObservableCollection <ILayer>();

            foreach (var customlayer in layers.Where(m => m.LayerType == LayerType.CustomLayerRaster))
            {
                orderedLayers.Add(customlayer);
            }
            foreach (var customlayer in layers.Where(m => m.LayerType == LayerType.ProjectLayer).Where(m => ((ResTBPostGISLayer)m).ResTBPostGISType == ResTBPostGISType.Perimeter))
            {
                orderedLayers.Add(customlayer);
            }
            foreach (var customlayer in layers.Where(m => m.LayerType == LayerType.ProjectLayer).Where(m => ((ResTBPostGISLayer)m).ResTBPostGISType == ResTBPostGISType.HazardMapBefore))
            {
                orderedLayers.Add(customlayer);
            }
            foreach (var customlayer in layers.Where(m => m.LayerType == LayerType.ProjectLayer).Where(m => ((ResTBPostGISLayer)m).ResTBPostGISType == ResTBPostGISType.HazardMapAfter))
            {
                orderedLayers.Add(customlayer);
            }
            foreach (var customlayer in layers.Where(m => m.LayerType == LayerType.ProjectLayer).Where(m => ((ResTBPostGISLayer)m).ResTBPostGISType == ResTBPostGISType.DamagePotential))
            {
                orderedLayers.Add(customlayer);
            }
            foreach (var customlayer in layers.Where(m => m.LayerType == LayerType.ProjectLayer).Where(m => ((ResTBPostGISLayer)m).ResTBPostGISType == ResTBPostGISType.ResilienceBefore))
            {
                orderedLayers.Add(customlayer);
            }
            foreach (var customlayer in layers.Where(m => m.LayerType == LayerType.ProjectLayer).Where(m => ((ResTBPostGISLayer)m).ResTBPostGISType == ResTBPostGISType.ResilienceAfter))
            {
                orderedLayers.Add(customlayer);
            }
            foreach (var customlayer in layers.Where(m => m.LayerType == LayerType.ProjectLayer).Where(m => ((ResTBPostGISLayer)m).ResTBPostGISType == ResTBPostGISType.MitigationMeasure))
            {
                orderedLayers.Add(customlayer);
            }
            foreach (var customlayer in layers.Where(m => m.LayerType == LayerType.ProjectLayer).Where(m => ((ResTBPostGISLayer)m).ResTBPostGISType == ResTBPostGISType.RiskMap))
            {
                orderedLayers.Add(customlayer);
            }
            foreach (var customlayer in layers.Where(m => m.LayerType == LayerType.ProjectLayer).Where(m => ((ResTBPostGISLayer)m).ResTBPostGISType == ResTBPostGISType.RiskMapAfter))
            {
                orderedLayers.Add(customlayer);
            }



            foreach (var item in orderedLayers)
            {
                if (item.LayerType == LayerType.CustomLayerRaster)
                {
                    rasters.Children.Add(new LayersModel(item));
                }
                if (item.LayerType == LayerType.ProjectLayer)
                {
                    if ((item.GetType() == typeof(ResTBResilienceLayer)) && (item.ShapeCount > 0))
                    {
                        ResTBResilienceLayer resLayer = (ResTBResilienceLayer)item;
                        if (projects.Children?.Where(m => m.Name == Resources.Resilience).Count() == 0)
                        {
                            projects.Children.Add(resilience);
                        }
                        resilience.Children.Add(new LayersModel(item));
                        resilience.VerifyCheckState();
                    }
                    else if ((item.GetType() == typeof(ResTBRiskMapLayer)) && (item.ShapeCount > 0))
                    {
                        ResTBRiskMapLayer rmLayer = (ResTBRiskMapLayer)item;
                        if (projects.Children?.Where(m => m.Name == Resources.RiskMap).Count() == 0)
                        {
                            projects.Children.Add(riskmap);
                        }
                        riskmap.Children.Add(new LayersModel(item));
                        riskmap.VerifyCheckState();
                    }
                    else if (item.GetType() == typeof(ResTBHazardMapLayer))
                    {
                        ResTBHazardMapLayer hazardMapLayer = (ResTBHazardMapLayer)item;
                        if (projects.Children?.Where(m => m.Name == Resources.Hazard_Map).Count() == 0)
                        {
                            projects.Children.Add(hazardMaps);
                        }


                        // Add or create Before Mitigation or After Mitigation LayerGroup
                        LayersModel beforeOrAfter = new LayersModel();
                        if (hazardMapLayer.ResTBPostGISType == ResTBPostGISType.HazardMapBefore)
                        {
                            beforeOrAfter = hazardMaps.Children.Where(m => m.Name == Resources.Before_Mitigation).FirstOrDefault();
                        }
                        else if (hazardMapLayer.ResTBPostGISType == ResTBPostGISType.HazardMapAfter)
                        {
                            beforeOrAfter = hazardMaps.Children.Where(m => m.Name == Resources.After_Mitigation).FirstOrDefault();
                        }
                        if (beforeOrAfter == null)
                        {
                            if (hazardMapLayer.ResTBPostGISType == ResTBPostGISType.HazardMapBefore)
                            {
                                beforeOrAfter = new LayersModel(Resources.Before_Mitigation);
                            }
                            else if (hazardMapLayer.ResTBPostGISType == ResTBPostGISType.HazardMapAfter)
                            {
                                beforeOrAfter = new LayersModel(Resources.After_Mitigation);
                            }
                            hazardMaps.Children.Add(beforeOrAfter);
                        }

                        // Add or create NatHazard Group
                        LayersModel natHazardGroup = beforeOrAfter.Children.Where(m => m.Name == hazardMapLayer.NatHazard.Name).FirstOrDefault();
                        if (natHazardGroup == null)
                        {
                            natHazardGroup = new LayersModel(hazardMapLayer.NatHazard.Name);
                            beforeOrAfter.Children.Add(natHazardGroup);
                        }
                        natHazardGroup.Children.Add(new LayersModel(hazardMapLayer.Index.ToString(), hazardMapLayer));
                        natHazardGroup.VerifyCheckState();
                        beforeOrAfter.VerifyCheckState();
                        hazardMaps.VerifyCheckState();
                    }
                    else
                    {
                        if ((item.GetType() == typeof(ResTBPerimeterLayer)) || (item.ShapeCount > 0))
                        {
                            projects.Children.Add(new LayersModel(item));
                        }
                    }
                }
            }

            if ((projects.Children != null) && (projects.Children.Count > 0))
            {
                //projects.VerifyManuallyCheckState();
                projects.VerifyCheckState();
                if (allLayers.Children?.Count() > 0)
                {
                    allLayers.Children.Add(projects);
                }
                else
                {
                    allLayers.Children = new ObservableCollection <LayersModel>()
                    {
                        projects
                    }
                };
            }
            if ((rasters.Children != null) && (rasters.Children.Count > 0))
            {
                rasters.VerifyCheckState();
                if (allLayers.Children?.Count() > 0)
                {
                    allLayers.Children.Add(rasters);
                }
                else
                {
                    allLayers.Children = new ObservableCollection <LayersModel>()
                    {
                        rasters
                    }
                };
            }
            allLayers.Initialize(selectedLayer);
            allLayers.VerifyCheckState();

            if ((oldModel != null) && (oldModel.Count > 0))
            {
                var layerList = oldModel.First()?.getAllChildren(new List <LayersModel>()).Where(m => m._manuallyChecked == true).ToList();
                //var newLayers = allLayers.getAllChildren(new List<LayersModel>());
                foreach (LayersModel lmOld in layerList)
                {
                    allLayers.PutAllChildrenToManually(lmOld.Layer);
                }
            }


            return(allLayers);
        }

        #region INotifyPropertyChanged Members

        void OnPropertyChanged(string prop)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(prop));
            }
        }