Пример #1
0
        static public void SaveServiceableDataset(IServiceableDataset sds, string name)
        {
            try
            {
                if (sds != null)
                {
                    XmlStream stream = new XmlStream("MapServer");
                    stream.Save("IServiceableDataset", sds);

                    stream.WriteStream(ServicesPath + @"\" + name + ".svc");

                    if (sds is IMetadata)
                    {
                        stream = new XmlStream("Metadata");
                        ((IMetadata)sds).WriteMetadata(stream);
                        stream.WriteStream(ServicesPath + @"\" + name + ".svc.meta");
                    }
                }
            }
            catch (Exception ex)
            {
                if (Functions.log_errors)
                {
                    Logger.Log(loggingMethod.error, "LoadConfig: " + ex.Message);
                }
            }
        }
Пример #2
0
            public ServiceableDatasetItem(MapServerConnectionExplorerObject exObject, IServiceableDataset sds)
            {
                _exObject = exObject;
                _sds      = sds;

                if (sds == null)
                {
                    return;
                }
                base.Text   = sds.Name;
                base.Click += new EventHandler(ServiceableDatasetItem_Click);
            }
Пример #3
0
        public MapServerConnectionExplorerObject(IExplorerObject parent)
            : base(parent, null, 0)
        {
            List <ToolStripItem> contextItems = new List <ToolStripItem>();

            ToolStripMenuItem importItem = new ToolStripMenuItem(LocalizedResources.GetResString("Menu.Import", "Import"));

            contextItems.Add(importItem);
            ToolStripMenuItem newService = new ToolStripMenuItem(LocalizedResources.GetResString("Menu.NewServiceFromMap", "New Service From gView Map..."));

            newService.Click += new EventHandler(newService_Click);
            newService.Image  = (new MapServiceIcon()).Image;
            importItem.DropDownItems.Add(newService);

            //ToolStripMenuItem newServiceColl = new ToolStripMenuItem("New Map Service Collection ...");
            //newServiceColl.Click += new EventHandler(newServiceColl_Click);
            //importItem.DropDownItems.Add(newServiceColl);

            PlugInManager compMan = new PlugInManager();

            foreach (Type serviceableType in compMan
                     .GetPlugins(Plugins.Type.IServiceableDataset))
            {
                IServiceableDataset ds = compMan.CreateInstance(serviceableType) as IServiceableDataset;
                if (ds == null)
                {
                    return;
                }

                if (importItem.DropDownItems.Count == 1)
                {
                    importItem.DropDownItems.Add(new ToolStripSeparator());
                }

                ToolStripItem item = new ServiceableDatasetItem(this, ds);
                item.Image = (new MapServiceIcon2()).Image;
                importItem.DropDownItems.Add(item);
            }

            _contextItems = contextItems.ToArray();
        }
Пример #4
0
        internal static IMap LoadMap(string name, IServiceRequestContext context)
        {
            try
            {
                DirectoryInfo di = new DirectoryInfo(ServicesPath);
                if (!di.Exists)
                {
                    di.Create();
                }

                FileInfo fi = new FileInfo(ServicesPath + @"\" + name + ".mxl");
                if (fi.Exists)
                {
                    ServerMapDocument doc = new ServerMapDocument();
                    doc.LoadMapDocument(fi.FullName);

                    if (doc.Maps.Count == 1)
                    {
                        ApplyMetadata(doc.Maps[0] as Map);
                        if (!mapDocument.AddMap(doc.Maps[0]))
                        {
                            return(null);
                        }

                        return(doc.Maps[0]);
                    }
                    return(null);
                }
                fi = new FileInfo(ServicesPath + @"\" + name + ".svc");
                if (fi.Exists)
                {
                    XmlStream stream = new XmlStream("");
                    stream.ReadStream(fi.FullName);
                    IServiceableDataset sds = stream.Load("IServiceableDataset", null) as IServiceableDataset;
                    if (sds != null && sds.Datasets != null)
                    {
                        Map map = new Map();
                        map.Name = name;

                        foreach (IDataset dataset in sds.Datasets)
                        {
                            if (dataset is IRequestDependentDataset)
                            {
                                if (!((IRequestDependentDataset)dataset).Open(context))
                                {
                                    return(null);
                                }
                            }
                            else
                            {
                                if (!dataset.Open())
                                {
                                    return(null);
                                }
                            }
                            //map.AddDataset(dataset, 0);

                            foreach (IDatasetElement element in dataset.Elements)
                            {
                                if (element == null)
                                {
                                    continue;
                                }
                                ILayer layer = LayerFactory.Create(element.Class, element as ILayer);
                                if (layer == null)
                                {
                                    continue;
                                }

                                map.AddLayer(layer);

                                if (element.Class is IWebServiceClass)
                                {
                                    if (map.SpatialReference == null)
                                    {
                                        map.SpatialReference = ((IWebServiceClass)element.Class).SpatialReference;
                                    }

                                    foreach (IWebServiceTheme theme in ((IWebServiceClass)element.Class).Themes)
                                    {
                                        map.SetNewLayerID(theme);
                                    }
                                }
                                else if (element.Class is IFeatureClass && map.SpatialReference == null)
                                {
                                    map.SpatialReference = ((IFeatureClass)element.Class).SpatialReference;
                                }
                                else if (element.Class is IRasterClass && map.SpatialReference == null)
                                {
                                    map.SpatialReference = ((IRasterClass)element.Class).SpatialReference;
                                }
                            }
                        }
                        ApplyMetadata(map);

                        if (!mapDocument.AddMap(map))
                        {
                            return(null);
                        }
                        return(map);
                    }
                    return(null);
                }
            }
            catch (Exception ex)
            {
                if (Functions.log_errors)
                {
                    Logger.Log(loggingMethod.error, "LoadConfig: " + ex.Message);
                }
            }

            return(null);
        }
Пример #5
0
        public bool AddMap(string mapName, string MapXML, string usr, string pwd)
        {
            if (String.IsNullOrEmpty(MapXML))
            {
                return(ReloadMap(mapName, usr, pwd));
            }

            if (IMS.acl != null && !IMS.acl.HasAccess(Identity.FromFormattedString(usr), pwd, "admin_addmap"))
            {
                return(false);
            }

            if (IMS.mapServer.Maps.Count >= IMS.mapServer.MaxServices)
            {
                // Überprüfen, ob schon eine Service mit gleiche Namen gibt...
                // wenn ja, ist es nur einem Refresh eines bestehenden Services
                bool found = false;
                foreach (IMapService map in IMS.mapServer.Maps)
                {
                    if (map.Name == mapName)
                    {
                        found = true;
                        break;
                    }
                }
                if (!found)
                {
                    return(false);
                }
            }

            if (MapXML.IndexOf("<IServiceableDataset") == 0)
            {
                XmlStream xmlStream = new XmlStream("");

                StringReader sr = new StringReader("<root>" + MapXML + "</root>");
                if (!xmlStream.ReadStream(sr))
                {
                    return(false);
                }

                IServiceableDataset sds = xmlStream.Load("IServiceableDataset", null) as IServiceableDataset;
                if (sds != null && sds.Datasets != null)
                {
                    IMS.SaveServiceableDataset(sds, mapName);
                    AddMapService(mapName, MapServiceType.SVC);
                }
            }
            else if (MapXML.IndexOf("<ServiceCollection") == 0)
            {
                XmlStream stream = new XmlStream("");

                StringReader sr = new StringReader(MapXML);
                if (!stream.ReadStream(sr))
                {
                    return(false);
                }

                IMS.SaveServiceCollection(mapName, stream);
            }
            else  // Map
            {
                XmlStream xmlStream = new XmlStream("IMap");

                StringReader sr = new StringReader(MapXML);
                if (!xmlStream.ReadStream(sr))
                {
                    return(false);
                }

                Map map = new Map();
                map.Load(xmlStream);
                map.Name = mapName;

                foreach (IMap m in ListOperations <IMap> .Clone(_doc.Maps))
                {
                    if (m.Name == map.Name)
                    {
                        _doc.RemoveMap(m);
                    }
                }

                if (!_doc.AddMap(map))
                {
                    return(false);
                }
                AddMapService(mapName, MapServiceType.MXL);

                IMS.SaveConfig(map);
            }

            /*
             * // Alle Layer sichtbar schalten...
             * IEnum layers = map.MapLayers;
             * IDatasetElement element;
             * while((element=(IDatasetElement)layers.Next)!=null)
             * {
             *  ITOCElement tocElement = map.TOC.GetTOCElement(element);
             *  if (tocElement != null) tocElement.LayerVisible = true;
             * }
             */

            return(true);
        }
Пример #6
0
        static public bool AddMap(string mapName, string MapXML, string usr, string pwd)
        {
            if (String.IsNullOrEmpty(MapXML))
            {
                return(ReloadMap(mapName, usr, pwd));
            }

            if (InternetMapServer.acl != null && !InternetMapServer.acl.HasAccess(Identity.FromFormattedString(usr), pwd, "admin_addmap"))
            {
                return(false);
            }

            if (InternetMapServer.Instance.Maps.Count >= InternetMapServer.Instance.MaxServices)
            {
                // Überprüfen, ob schon eine Service mit gleiche Namen gibt...
                // wenn ja, ist es nur einem Refresh eines bestehenden Services
                bool found = false;
                foreach (IMapService map in InternetMapServer.Instance.Maps)
                {
                    if (map.Name == mapName)
                    {
                        found = true;
                        break;
                    }
                }
                if (!found)
                {
                    return(false);
                }
            }

            if (MapXML.IndexOf("<IServiceableDataset") == 0)
            {
                XmlStream xmlStream = new XmlStream("");

                StringReader sr = new StringReader("<root>" + MapXML + "</root>");
                if (!xmlStream.ReadStream(sr))
                {
                    return(false);
                }

                IServiceableDataset sds = xmlStream.Load("IServiceableDataset", null) as IServiceableDataset;
                if (sds != null && sds.Datasets != null)
                {
                    InternetMapServer.SaveServiceableDataset(sds, mapName);
                    AddMapService(mapName, MapServiceType.SVC);
                }
            }
            else if (MapXML.IndexOf("<ServiceCollection") == 0)
            {
                XmlStream stream = new XmlStream("");

                StringReader sr = new StringReader(MapXML);
                if (!stream.ReadStream(sr))
                {
                    return(false);
                }

                InternetMapServer.SaveServiceCollection(mapName, stream);
            }
            else  // Map
            {
                XmlStream xmlStream = new XmlStream("IMap");

                StringReader sr = new StringReader(MapXML);
                if (!xmlStream.ReadStream(sr))
                {
                    return(false);
                }

                Map map = new Map();
                map.Load(xmlStream);
                map.Name = mapName;

                //foreach (IMap m in ListOperations<IMap>.Clone(_doc.Maps))
                //{
                //    if (m.Name == map.Name) _doc.RemoveMap(m);
                //}

                //if (!_doc.AddMap(map)) return false;
                AddMapService(mapName, MapServiceType.MXL);

                InternetMapServer.SaveConfig(map);
            }

            return(true);
        }