Exemple #1
0
        private static void DeserializeLayers(MapGroup g, dynamic layers)
        {
            foreach (var layer in layers)
            {
                try
                {
                    LegacyLayerType typeOfLayer = (LegacyLayerType)Enum.ToObject(typeof(LegacyLayerType), Convert.ToInt32(layer["Type"]));
                    Layer           mapLayer;

                    switch (typeOfLayer)
                    {
                    case LegacyLayerType.Grid:
                        mapLayer = GetGridLayer(layer);
                        break;

                    case LegacyLayerType.Image:
                        mapLayer = GetImageLayer(layer);
                        break;

                    case LegacyLayerType.Invalid:
                        throw new ArgumentException("The LayerType is an invalid layer type and cannot be loaded.");

                    case LegacyLayerType.LineShapefile:
                        mapLayer = GetLineLayer(layer);
                        break;

                    case LegacyLayerType.PointShapefile:
                        mapLayer = GetPointLayer(layer);
                        break;

                    case LegacyLayerType.PolygonShapefile:
                        mapLayer = GetPolygonLayer(layer);

                        break;

                    default:
                        throw new NotImplementedException("That LayerType is not supported.");
                    }

                    if (mapLayer != null)
                    {
                        LegacyDeserializer.DeserializeLayerProperties(layer, mapLayer);

                        g.Add(mapLayer);
                    }
                }
                catch (Exception exOpen)
                {
                    // TODO: provide a warning of some sort, possibly ask abort/retry/continue
                    // HACK: we should be catching a more specific exception.
                    Trace.WriteLine(exOpen.Message);
                }
            }
        }
        public void Deserialize(dynamic xmlRoot)
        {
            var mapwin4Section = xmlRoot.MapWindow4;
            var mapwingisSection = xmlRoot.MapWinGIS;

            _map.MapFrame.ProjectionString = mapwin4Section["ProjectProjection"];

            if (!Convert.ToBoolean(mapwin4Section["ViewBackColor_UseDefault"]))
            {
                var mapControl = _map as Control;
                if (mapControl != null)
                    mapControl.BackColor = LegacyDeserializer.GetColor(mapwin4Section["ViewBackColor"]);

                _map.Invalidate();
            }

            // Deserialize layers
            var layersDescs = mapwingisSection.Layers.Elements();
            var allLayers = new Dictionary<int, List<ILayer>>(); // key: Group Name. Value: layers
            foreach (var layer in mapwin4Section.Layers.Elements())
            {
                var name = (string)layer["Name"];
                var groupInd = Convert.ToInt32(layer["GroupIndex"]);
                if (!allLayers.ContainsKey(groupInd)) allLayers[groupInd] = new List<ILayer>();
                var listLayers = allLayers[groupInd];
                
                IMapLayer layerToAdd = null;
                foreach (var layersDesc in layersDescs)
                {
                    if (layersDesc["LayerName"] == name)
                    {
                        var lt = (string) layersDesc["LayerType"]; 
                        switch (lt)
                        {
                            case "Image":
                                layerToAdd = new MapImageLayer(ImageData.Open(layersDesc["Filename"]));
                                break;
                            case "Shapefile":
                                var fs = FeatureSet.OpenFile(layersDesc["Filename"]);
                                if (fs is PointShapefile)
                                {
                                    layerToAdd = new MapPointLayer(fs);
                                }
                                else if (fs is PolygonShapefile)
                                {
                                    layerToAdd = new MapPolygonLayer(fs);
                                }
                                else if (fs is LineShapefile)
                                {
                                    layerToAdd = new MapLineLayer(fs);
                                }
                                else
                                {
                                    Trace.WriteLine("Unsupported FeatureSet Type: " + fs.GetType());
                                }
                                break;
                            default:
                                Trace.WriteLine("Unsupported LayerType: " + lt);
                                break;
                        }
                        break;
                    }
                }

                if (layerToAdd != null)
                {
                    layerToAdd.IsExpanded = Convert.ToBoolean(layer["Expanded"]);
                    listLayers.Add(layerToAdd);
                }
            }

            // Deserialize groups
            foreach (var group in mapwin4Section.Groups.Elements())
            {
                var gInd = Convert.ToInt32(group["Position"]);
                var g = new MapGroup
                {
                    LegendText = group["Name"],
                    IsExpanded = Convert.ToBoolean(group["Expanded"])
                };
                List<ILayer> gl;
                if (allLayers.TryGetValue(gInd, out gl))
                {
                    foreach (var layer in gl)
                    {
                       g.Add(layer);
                    }
                }
                _map.MapFrame.Layers.Add(g);
            }
        }
        /// <summary>
        /// Deserializes beginning from the given root.
        /// </summary>
        /// <param name="xmlRoot">Root to use as string point.</param>
        public void Deserialize(dynamic xmlRoot)
        {
            var mapwin4Section   = xmlRoot.MapWindow4;
            var mapwingisSection = xmlRoot.MapWinGIS;

            _map.MapFrame.ProjectionString = mapwin4Section["ProjectProjection"];

            if (!Convert.ToBoolean(mapwin4Section["ViewBackColor_UseDefault"]))
            {
                var mapControl = _map as Control;
                if (mapControl != null)
                {
                    mapControl.BackColor = LegacyDeserializer.GetColor(mapwin4Section["ViewBackColor"]);
                }

                _map.Invalidate();
            }

            // Deserialize layers
            var layersDescs = mapwingisSection.Layers.Elements();
            var allLayers   = new Dictionary <int, List <ILayer> >(); // key: Group Name. Value: layers

            foreach (var layer in mapwin4Section.Layers.Elements())
            {
                var name     = (string)layer["Name"];
                var groupInd = Convert.ToInt32(layer["GroupIndex"]);
                if (!allLayers.ContainsKey(groupInd))
                {
                    allLayers[groupInd] = new List <ILayer>();
                }
                var listLayers = allLayers[groupInd];

                IMapLayer layerToAdd = null;
                foreach (var layersDesc in layersDescs)
                {
                    if (layersDesc["LayerName"] == name)
                    {
                        var lt = (string)layersDesc["LayerType"];
                        switch (lt)
                        {
                        case "Image":
                            layerToAdd = new MapImageLayer(ImageData.Open(layersDesc["Filename"]));
                            break;

                        case "Shapefile":
                            var fs = FeatureSet.OpenFile(layersDesc["Filename"]);
                            if (fs is PointShapefile)
                            {
                                layerToAdd = new MapPointLayer(fs);
                            }
                            else if (fs is PolygonShapefile)
                            {
                                layerToAdd = new MapPolygonLayer(fs);
                            }
                            else if (fs is LineShapefile)
                            {
                                layerToAdd = new MapLineLayer(fs);
                            }
                            else
                            {
                                var type = (object)fs.GetType().ToString();
                                Trace.WriteLine("Unsupported FeatureSet Type: " + type);
                            }

                            break;

                        default:
                            Trace.WriteLine("Unsupported LayerType: " + lt);
                            break;
                        }

                        break;
                    }
                }

                if (layerToAdd != null)
                {
                    layerToAdd.IsExpanded = Convert.ToBoolean(layer["Expanded"]);
                    listLayers.Add(layerToAdd);
                }
            }

            // Deserialize groups
            foreach (var group in mapwin4Section.Groups.Elements())
            {
                var gInd = Convert.ToInt32(group["Position"]);
                var g    = new MapGroup
                {
                    LegendText = group["Name"],
                    IsExpanded = Convert.ToBoolean(group["Expanded"])
                };
                List <ILayer> gl;
                if (allLayers.TryGetValue(gInd, out gl))
                {
                    foreach (var layer in gl)
                    {
                        g.Add(layer);
                    }
                }

                _map.MapFrame.Layers.Add(g);
            }
        }
        private static void DeserializeLayers(MapGroup g, dynamic layers)
        {
            foreach (var layer in layers)
            {
                try
                {
                    LegacyLayerType typeOfLayer = (LegacyLayerType)Enum.ToObject(typeof(LegacyLayerType), Convert.ToInt32(layer["Type"]));
                    Layer mapLayer = null;

                    switch (typeOfLayer)
                    {
                        case LegacyLayerType.Grid:
                            mapLayer = GetGridLayer(layer);
                            break;
                        case LegacyLayerType.Image:
                            mapLayer = GetImageLayer(layer);
                            break;
                        case LegacyLayerType.Invalid:
                            throw new ArgumentException("The LayerType is an invalid layer type and cannot be loaded.");
                        case LegacyLayerType.LineShapefile:
                            mapLayer = GetLineLayer(layer);
                            break;
                        case LegacyLayerType.PointShapefile:
                            mapLayer = GetPointLayer(layer);
                            break;
                        case LegacyLayerType.PolygonShapefile:
                            mapLayer = GetPolygonLayer(layer);

                            break;
                        default:
                            throw new NotImplementedException("That LayerType is not supported.");
                    }
                    if (mapLayer != null)
                    {
                        LegacyDeserializer.DeserializeLayerProperties(layer, mapLayer);

                        g.Add(mapLayer);
                    }
                }
                catch (Exception exOpen)
                {
                    //TODO: provide a warning of some sort, possibly ask abort/retry/continue
                    //HACK: we should be catching a more specific exception.
                    Trace.WriteLine(exOpen.Message);
                }
            }
        }