Exemplo n.º 1
0
        /// <summary>
        /// 反序列化点图像
        /// 从mwsr中获得点信息并翻译,应用到图层上。
        /// </summary>
        public void DeserializePointImageScheme(int newHandle, XmlElement root)
        {
            Program.frmMain.MapMain.LockWindow(MapWinGIS.tkLockMode.lmLock);
            try
            {
                MapWinGIS.Utility.ImageUtils imgUtil = new MapWinGIS.Utility.ImageUtils();

                bool found = false;
                Interfaces.ShapefilePointImageScheme csh = new Interfaces.ShapefilePointImageScheme(newHandle);

                Hashtable TranslationTable = new Hashtable();

                foreach (XmlElement xe1 in root)
                {
                    if (xe1.Name == "PointImageScheme")
                    {
                        found          = true;
                        csh.FieldIndex = long.Parse(xe1.Attributes["FieldIndex"].InnerText);

                        foreach (XmlElement xe2 in xe1.ChildNodes)
                        {
                            if (xe2.Name == "ImageData")
                            {
                                foreach (XmlElement xe3 in xe2.ChildNodes)
                                {
                                    long origIndex = long.Parse(xe3.Attributes["ID"].InnerText);

                                    string imgtype;
                                    imgtype = xe3["Image"].Attributes["Type"].InnerText;
                                    System.Drawing.Image img = (System.Drawing.Image)(ConvertStringToImage(xe3["Image"].InnerText, imgtype));

                                    MapWinGIS.Image ico = new MapWinGIS.Image();
                                    ico.Picture = (stdole.IPictureDisp)imgUtil.ImageToIPictureDisp(img);
                                    if (ico != null)
                                    {
                                        ico.TransparencyColor = (uint)ico.Value[0, 0];
                                    }

                                    int newidx = System.Convert.ToInt32(Program.frmMain.MapMain.set_UDPointImageListAdd(newHandle, ico));
                                    TranslationTable.Add(origIndex, newidx);
                                    img = null;
                                }
                            }
                            else if (xe2.Name == "ItemData")
                            {
                                foreach (XmlElement xe3 in xe2.ChildNodes)
                                {
                                    if (xe3.Name == "Item")
                                    {
                                        string tag         = xe3.Attributes["MatchValue"].InnerText;
                                        long   imgIndex    = long.Parse(xe3.Attributes["ImgIndex"].InnerText);
                                        long   actualIndex = -1;
                                        if (TranslationTable.Contains(imgIndex))
                                        {
                                            actualIndex = System.Convert.ToInt64(TranslationTable[imgIndex]);
                                        }
                                        else
                                        {
                                            actualIndex = imgIndex;
                                        }

                                        if (actualIndex != -1 && tag != "")
                                        {
                                            csh.Items.Add(tag, actualIndex);
                                        }

                                        MapWinGIS.Shapefile sf;

                                        sf = (MapWinGIS.Shapefile)(Program.frmMain.m_Layers[newHandle].GetObject());
                                        if (sf == null)
                                        {
                                            Program.g_error = "获取Shapefile 对象失败。";
                                            return;
                                        }

                                        if (actualIndex != -1)
                                        {
                                            for (int j = 0; j < sf.NumShapes; j++)
                                            {
                                                if (sf.CellValue[(int)csh.FieldIndex, j].ToString() == tag)
                                                {
                                                    Program.frmMain.MapMain.set_ShapePointImageListID(newHandle, j, (int)actualIndex);
                                                    if (Program.frmMain.MapMain.get_ShapePointType(newHandle, j) != MapWinGIS.tkPointType.ptImageList)
                                                    {
                                                        Program.frmMain.MapMain.set_ShapePointType(newHandle, j, MapWinGIS.tkPointType.ptImageList);
                                                    }
                                                    Program.frmMain.MapMain.set_ShapePointSize(newHandle, j, 1);
                                                }
                                            }
                                        }

                                        sf = null;
                                    }
                                }
                            }
                            else if (xe2.Name == "ItemVisibility")
                            {
                                foreach (XmlElement xe3 in xe2.ChildNodes)
                                {
                                    if (xe3.Name == "Item")
                                    {
                                        string tag = xe3.Attributes["MatchValue"].InnerText;
                                        bool   vis = bool.Parse(xe3.Attributes["Visible"].InnerText);
                                        csh.ItemVisibility.Add(tag, vis);

                                        MapWinGIS.Shapefile sf;

                                        sf = (MapWinGIS.Shapefile)(Program.frmMain.m_Layers[newHandle].GetObject());
                                        if (sf == null)
                                        {
                                            Program.g_error = "获取Shapefile 对象失败.";
                                            return;
                                        }

                                        for (int j = 0; j < sf.NumShapes; j++)
                                        {
                                            if (sf.CellValue[(int)csh.FieldIndex, j].ToString() == tag)
                                            {
                                                Program.frmMain.MapMain.set_ShapeVisible(newHandle, j, vis);
                                            }
                                        }

                                        sf = null;
                                    }
                                }
                            }
                        }
                        break;
                    }
                }

                if (found)
                {
                    Program.frmMain.Legend.Layers.ItemByHandle(newHandle).PointImageScheme = csh;
                }

                TranslationTable.Clear();
                GC.Collect();
            }
            catch (Exception ex)
            {
                MapWinGIS.Utility.Logger.Dbg("DEBUG: " + ex.ToString());
            }
            finally
            {
                Program.frmMain.MapMain.LockWindow(MapWinGIS.tkLockMode.lmUnlock);
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// 序列化点图像
 /// 未实现
 /// </summary>
 public void SerializePointImageScheme(Interfaces.ShapefilePointImageScheme PointImgScheme, XmlDocument doc, XmlElement root)
 {
 }