Ejemplo n.º 1
0
 private XElement GetDocumentableLayersXml(IDataFrame df)
 {
     return(df.GetDocumentableLayersHostXml());
 }
Ejemplo n.º 2
0
        static DataFrame()
        {
            LayoutHost.LoadGeoGridLayerExecutor = (xml) =>
            {
                return(GeoDo.RSS.Core.Grid.GeoGridLayer.FromXml(xml));
            };

            LayoutHost.LoadDataFrameExecutor = (gxfile, host, df, dfEle) =>
            {
                IDataFrameDataProvider prd = df.Provider as IDataFrameDataProvider;
                ICanvas  canvas            = prd.Canvas;
                string   fname             = Path.Combine(Path.GetDirectoryName(gxfile), "tempMcd.xml");
                XElement mapElement        = dfEle.Element("Map");
                //旧模版没有Map节点
                if (mapElement != null)
                {
                    File.WriteAllText(fname, mapElement.ToString());
                    if (canvas == null)
                    {
                        return;
                    }
                    if (canvas.LayerContainer.VectorHost == null)
                    {
                        IVectorHostLayer vhost = new VectorHostLayer(null, fname);
                        vhost.IsEnableDummyRender       = false;
                        vhost.SomeDataIsArrivedHandler += new EventHandler((sender, e) => { host.Render(true); });
                        canvas.LayerContainer.Layers.Add(vhost as GeoDo.RSS.Core.DrawEngine.ILayer);
                    }
                }
                double minX = GetDoubleAtt(dfEle, "minx");
                double maxX = GetDoubleAtt(dfEle, "maxx");
                double minY = GetDoubleAtt(dfEle, "miny");
                double maxY = GetDoubleAtt(dfEle, "maxy");
                if (Math.Abs(minX) > double.Epsilon &&
                    Math.Abs(minY) > double.Epsilon &&
                    Math.Abs(maxX) > double.Epsilon &&
                    Math.Abs(maxY) > double.Epsilon)
                {
                    canvas.CurrentEnvelope = new CoordEnvelope(minX, maxX, minY, maxY);
                }
                //
                df.IsLocked = true;
            };

            //模版保存时调用
            LayoutToFile.DataFrame2XmlNodeConverter = (dstFileName, df, doc) =>
            {
                if (df == null || doc == null)
                {
                    return(null);
                }
                IDataFrameDataProvider prd = df.Provider as IDataFrameDataProvider;
                if (prd == null)
                {
                    return(null);
                }
                ICanvas canvas = prd.Canvas;
                if (canvas == null)
                {
                    return(null);
                }
                XmlElement dfNode = doc.CreateElement("DataFrame");
                dfNode.SetAttribute("name", df.Name);
                dfNode.SetAttribute("minx", canvas.CurrentEnvelope.MinX.ToString());
                dfNode.SetAttribute("miny", canvas.CurrentEnvelope.MinY.ToString());
                dfNode.SetAttribute("maxx", canvas.CurrentEnvelope.MaxX.ToString());
                dfNode.SetAttribute("maxy", canvas.CurrentEnvelope.MaxY.ToString());
                //
                IVectorHostLayer hostLayer = canvas.LayerContainer.VectorHost;
                if (hostLayer != null)
                {
                    IMap map = hostLayer.Map as IMap;
                    if (map == null)
                    {
                        return(null);
                    }
                    string        fname = Path.Combine(Path.GetDirectoryName(dstFileName), "TempMcd.xml");
                    StringBuilder sb    = new StringBuilder();
                    try
                    {
                        map.SaveTo(fname, true);
                        string[] lines = File.ReadAllLines(fname);
                        for (int i = 1; i < lines.Length; i++)
                        {
                            sb.AppendLine(lines[i]);
                        }
                    }
                    finally
                    {
                        if (File.Exists(fname))
                        {
                            File.Delete(fname);
                        }
                    }
                    //
                    dfNode.InnerXml = sb.ToString();
                }
                //
                return(dfNode);
            };

            GxdDocument.GxdVectorHostGettter = (df) =>
            {
                IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;
                if (provider == null)
                {
                    return(null);
                }
                ICanvas c = provider.Canvas;
                if (c == null)
                {
                    return(null);
                }
                IVectorHostLayer hostLayer = c.LayerContainer.VectorHost;
                if (hostLayer == null)
                {
                    return(null);
                }
                IMap map = hostLayer.Map as IMap;
                if (map == null)
                {
                    return(null);
                }
                string fname = AppDomain.CurrentDomain.BaseDirectory + "TempMcd.xml";
                //这里相对路径不正确
                map.SaveTo(fname, false);
                string[]      lines = File.ReadAllLines(fname);
                StringBuilder sb    = new StringBuilder();
                for (int i = 1; i < lines.Length; i++)
                {
                    sb.AppendLine(lines[i]);
                }
                return(new GxdVectorHost(sb.ToString()));
            };
            //
            GxdDocument.GxdEnvelopeGetter = (df) =>
            {
                IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;
                if (provider == null)
                {
                    return(null);
                }
                ICanvas c = provider.Canvas;
                if (c == null)
                {
                    return(null);
                }
                return(new GxdEnvelope(c.CurrentEnvelope.MinX, c.CurrentEnvelope.MaxX, c.CurrentEnvelope.MinY, c.CurrentEnvelope.MaxY));
            };
            //
            GxdDocument.GxDataFrameRasterItemsSetter = (df, gxddf) =>
            {
                IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;
                if (provider == null)
                {
                    return;
                }
                ICanvas c = provider.Canvas;
                if (c == null)
                {
                    return;
                }
                IRasterDrawing drawing = c.PrimaryDrawObject as IRasterDrawing;
                if (drawing == null)
                {
                    return;
                }
                IGxdRasterItem it = new GxdRasterItem(drawing.FileName, null);
                gxddf.GxdRasterItems.Add(it);
            };
            //
            GxdDocument.GxdAddDataFrameExecutor = (fileName, gxdf, host) =>
            {
                if (gxdf == null || host == null)
                {
                    return;
                }
                IElement[] dfs = host.LayoutRuntime.QueryElements((e) => { return(e is IDataFrame); }, false);
                if (dfs == null || dfs.Length == 0)
                {
                    return;
                }
                foreach (IElement e in dfs)
                {
                    if (e.Name != null && gxdf.Name != null && e.Name == gxdf.Name)
                    {
                        IDataFrame crtDataFrame = e as IDataFrame;
                        if (crtDataFrame.Provider == null)
                        {
                            continue;
                        }
                        crtDataFrame.IsLocked = true;
                        ICanvas canvas = (crtDataFrame.Provider as IDataFrameDataProvider).Canvas;
                        //set spatial ref
                        SetSpatialRefForDataFrame(gxdf.SpatialRef, crtDataFrame);
                        //raster
                        if (gxdf.GxdRasterItems != null && gxdf.GxdRasterItems.Count > 0)
                        {
                            foreach (IGxdRasterItem rst in gxdf.GxdRasterItems)
                            {
                                if (rst == null || string.IsNullOrEmpty(rst.FileName))
                                {
                                    continue;
                                }
                                if (AddFileToCanvasViewerExecutor != null)
                                {
                                    AddFileToCanvasViewerExecutor(rst.FileName, rst.Arguments, canvas, rst.FileOpenArgs, rst.ColorTableName);
                                }
                            }
                        }
                        //vector
                        if (gxdf.GxdVectorHost != null && gxdf.GxdVectorHost.McdFileContent != null)
                        {
                            string fname = Path.Combine(Path.GetDirectoryName(fileName), "tempMcd.xml");
                            File.WriteAllText(fname, gxdf.GxdVectorHost.McdFileContent.ToString());
                            if (canvas.LayerContainer.VectorHost == null)
                            {
                                IVectorHostLayer vhost = new VectorHostLayer(null, fname);
                                vhost.IsEnableDummyRender       = false;
                                vhost.SomeDataIsArrivedHandler += new EventHandler((sender, arge) => { host.Render(true); });
                                canvas.LayerContainer.Layers.Add(vhost as GeoDo.RSS.Core.DrawEngine.ILayer);
                            }
                        }
                        //coord envelope
                        if (gxdf.Envelope != null && !gxdf.Envelope.IsEmpty())
                        {
                            GeoDo.RSS.Core.DrawEngine.CoordEnvelope evp = new CoordEnvelope(gxdf.Envelope.MinX, gxdf.Envelope.MaxX, gxdf.Envelope.MinY, gxdf.Envelope.MaxY);
                            canvas.CurrentEnvelope = evp;
                        }
                        //vector host
                        if (canvas.LayerContainer.VectorHost == null)
                        {
                            IVectorHostLayer vhost = new VectorHostLayer(null);
                            vhost.IsEnableDummyRender       = false;
                            vhost.SomeDataIsArrivedHandler += new EventHandler((sender, arge) => { host.Render(true); });
                            canvas.LayerContainer.Layers.Add(vhost as GeoDo.RSS.Core.DrawEngine.ILayer);
                        }
                        //documentable layers
                        XElement otherLayersHost = crtDataFrame.GetDocumentableLayersHostXml();
                        if (otherLayersHost != null)
                        {
                            Object2Xml obj2xml = new Object2Xml();
                            foreach (XElement otherLyr in otherLayersHost.Elements())
                            {
                                //IDocumentableLayer lyr = obj2xml.FromXml(otherLyr) as IDocumentableLayer;
                                //if (lyr != null)
                                //    lyr.Load();
                            }
                        }
                        break;
                    }
                }
            };
        }