Ejemplo n.º 1
0
        /// <summary>
        /// 获取标注XML节点,SLD的注记方式和ArcMap的标注方式不一样,这里只解析了最基本的要素,高级标注要素未进行解析
        /// </summary>
        /// <param name="xmlDoc"></param>
        /// <returns></returns>
        public XmlElement GetSymbolNode(XmlDocument xmlDoc)
        {
            XmlElement pAnnotaElment = null;

            if (!this.IsSingleProperty || string.IsNullOrEmpty(this.PropertyName))
            {
                return(pAnnotaElment);
            }
            else
            {
                //创建TextSymbolizer节点
                pAnnotaElment = CommXmlHandle.CreateElement("TextSymbolizer", xmlDoc);
                //写标注字段信息
                XmlElement pLableElment   = CommXmlHandle.CreateElement("TextLabel", xmlDoc);
                XmlElement pLableProperty = CommXmlHandle.CreateElementAndSetElemnetText("TextLabelProperty", xmlDoc, PropertyName);
                pLableElment.AppendChild(pLableProperty);
                pAnnotaElment.AppendChild(pLableElment);
                //写字体信息
                pAnnotaElment.AppendChild(TextSymbol.GetSymbolNode(xmlDoc)[0]);
                //写填充颜色
                XmlElement pTextFillElment = CommXmlHandle.CreateElement("TextFill", xmlDoc);
                XmlElement pFillElment     = CommXmlHandle.CreateElementAndSetElemnetText("TextFillCssParameter", xmlDoc, TextSymbol.Color);
                CommXmlHandle.SetAttributeValue("fill", CommXmlHandle.CreateAttribute("name", pFillElment, xmlDoc));
                pTextFillElment.AppendChild(pFillElment);
                pAnnotaElment.AppendChild(pTextFillElment);
            }
            return(pAnnotaElment);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 创建SLD文件
 /// </summary>
 /// <param name="FileName"></param>
 /// <param name="bIncludeLayerNames"></param>
 /// <returns></returns>
 private bool CreateSLD(string FileName, bool bIncludeLayerNames)
 {
     try
     {
         m_newXmlDoc = CommXmlHandle.CreateNewFile(FileName, true, bIncludeLayerNames);
         if (m_newXmlDoc == null)
         {
             return(false);
         }
         return(true);
     }
     catch (Exception ex)
     {
         return(false);
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 窗体加载事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Motherform_Load(System.Object sender, System.EventArgs e)
        {
            //读取配置信息
            string TempLutFileName = "";

            if (m_bIncludeLayerNames)
            {
                TempLutFileName = CommXmlHandle.c_strLUT_Standard;
            }
            else
            {
                TempLutFileName = CommXmlHandle.c_strLUT_WorldMap;
            }
            if (!CommXmlHandle.ReadLUT(Path.GetDirectoryName(GetType().Assembly.Location), TempLutFileName))
            {
                MessageBox.Show("读取配置信息有误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 读取XML配置文件信息
        /// </summary>
        private void ReadXmlConfig()
        {
            //读取配置信息
            string TempLutFileName = "";

            if (m_IncludeLayerName)
            {
                TempLutFileName = CommXmlHandle.c_strLUT_Standard;
            }
            else
            {
                TempLutFileName = CommXmlHandle.c_strLUT_WorldMap;
            }
            if (!CommXmlHandle.ReadLUT(Path.GetDirectoryName(GetType().Assembly.Location), TempLutFileName))
            {
                MessageBox.Show("读取配置信息有误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Ejemplo n.º 5
0
 public override XmlElement GetRendXmlNode(XmlDocument xmlDoc, XmlElement RootXmlElement)
 {
     try
     {
         //如果有标注,则添加标注信息
         XmlElement pAnnotationElment = null;
         if (AnnotationClass.IsSingleProperty && !string.IsNullOrEmpty(AnnotationClass.PropertyName))
         {
             pAnnotationElment = AnnotationClass.GetSymbolNode(xmlDoc);
         }
         //开始解析渲染符号信息
         for (int i = 0; i < SymbolList.Count; i++)
         {
             XmlElement    pRuleElement = default(XmlElement);
             ptSymbolClass pSymbolClass = SymbolList[i];
             //生成Rule节点信息
             pRuleElement = CommXmlHandle.CreateElement("Rule", xmlDoc);
             pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("RuleName", xmlDoc, string.IsNullOrEmpty(pSymbolClass.Label)?string.Format("rule{0}", i):pSymbolClass.Label));
             pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("Title", xmlDoc, string.IsNullOrEmpty(pSymbolClass.Label) ? string.Format("rule{0}", i) : pSymbolClass.Label));
             //设置显示比例尺
             if (!double.IsNaN(m_ptLayer.m_MaxScale) && !double.IsNaN(m_ptLayer.m_MinScale))
             {
                 pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("MinScale", xmlDoc, m_ptLayer.m_MaxScale.ToString()));
                 pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("MaxScale", xmlDoc, m_ptLayer.m_MinScale.ToString()));
             }
             //获取符号节点
             IList <XmlElement> pSymbolizedNode = pSymbolClass.GetSymbolNode(xmlDoc);
             foreach (XmlElement pElement in pSymbolizedNode)
             {
                 pRuleElement.AppendChild(pElement);
             }
             if (pAnnotationElment != null)
             {
                 pRuleElement.AppendChild(pAnnotationElment.CloneNode(true));
             }
             RootXmlElement.AppendChild(pRuleElement);
         }
     }
     catch (Exception ex)
     {
         ptLogManager.WriteMessage(string.Format("解析符号信息失败:{0}{1}{2}{3}", Environment.NewLine, ex.Message, Environment.NewLine, ex.StackTrace));
     }
     return(RootXmlElement);
 }
Ejemplo n.º 6
0
 /// <summary>
 /// 是否包含图层名
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void mnuIncludeLayerNames_Click(System.Object sender, System.EventArgs e)
 {
     if (mnuIncludeLayerNames.Checked)
     {
         mnuIncludeLayerNames.Checked = false;
         m_bIncludeLayerNames         = false;
         if (!CommXmlHandle.ReadLUT(Path.GetDirectoryName(GetType().Assembly.Location), CommXmlHandle.c_strLUT_WorldMap))
         {
             MessageBox.Show("读取配置信息有误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
     else
     {
         mnuIncludeLayerNames.Checked = true;
         m_bIncludeLayerNames         = true;
         if (!CommXmlHandle.ReadLUT(Path.GetDirectoryName(GetType().Assembly.Location), CommXmlHandle.c_strLUT_Standard))
         {
             MessageBox.Show("读取配置信息有误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
 }
Ejemplo n.º 7
0
        /// <summary>
        /// 将分析的符号信息写入SLD
        /// </summary>
        /// <returns></returns>
        public bool WriteToSLD(bool SepFiles, bool IncludeLayerNames)
        {
            string         cLayerName     = "";                  //图层名称
            IList <string> objFieldValues = new List <string>(); //字段值列表
            bool           bDoOneLayer    = false;
            double         dummy          = 0;
            string         sldFileName    = "";

            if (SepFiles)
            {
                bDoOneLayer = false;
            }
            else
            {
                bDoOneLayer = true;
                sldFileName = m_cFilename;
                if (!CreateSLD(sldFileName, IncludeLayerNames))
                {
                    ptLogManager.WriteMessage(string.Format("创建SLD文件失败:{0}", sldFileName));
                    return(false);
                }
            }
            try
            {
                XmlElement pRootElment = null;
                foreach (string key in m_strDataSavings.m_LayerRender.Keys)
                {
                    #region 获取图层名称
                    string strDatasetName            = "";                         //数据集名称
                    IList <ptSymbolClass> objSymbols = new List <ptSymbolClass>(); //符号列表
                    ptLayer pLayer = m_strDataSavings.m_LayerRender[key];
                    strDatasetName = pLayer.m_LayerRender.m_DatasetName;
                    cLayerName     = pLayer.m_LayerRender.m_LayerName;
                    objSymbols     = pLayer.m_LayerRender.SymbolList;
                    ptRender pRender = pLayer.m_LayerRender;
                    #endregion
                    m_WriteLog(string.Format("正在处理图层【{0}】...", cLayerName));
                    //是否每个图层都要新建一个SLD文件
                    if (!bDoOneLayer)
                    {
                        sldFileName = m_cPath + "\\" + cLayerName + ".sld";
                        if (!CreateSLD(sldFileName, IncludeLayerNames))
                        {
                            m_WriteLog(string.Format("创建SLD文件失败:{0}", sldFileName));
                            break;
                        }
                    }
                    #region 创建基础节点
                    if (IncludeLayerNames)
                    {
                        XmlElement NameLayerelment = m_newXmlDoc.DocumentElement.AppendChild(CommXmlHandle.CreateElement("NamedLayer", m_newXmlDoc)) as XmlElement;
                        NameLayerelment.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("LayerName", m_newXmlDoc, strDatasetName));
                        XmlElement UserStyleElment = CommXmlHandle.CreateElement("UserStyle", m_newXmlDoc);
                        UserStyleElment.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("StyleName", m_newXmlDoc, "Style1"));
                        NameLayerelment.AppendChild(UserStyleElment);
                        XmlElement TypeStyleElement = CommXmlHandle.CreateElement("FeatureTypeStyle", m_newXmlDoc);
                        TypeStyleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("FeatureTypeName", m_newXmlDoc, strDatasetName));
                        UserStyleElment.AppendChild(TypeStyleElement);
                        pRender.GetRendXmlNode(m_newXmlDoc, TypeStyleElement);
                    }
                    else
                    {
                        if (pRootElment == null)
                        {
                            pRootElment = m_newXmlDoc.DocumentElement.AppendChild(CommXmlHandle.CreateElement("FeatureTypeStyle", m_newXmlDoc)) as XmlElement;
                            pRootElment = pRootElment.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("FeatureTypeName", m_newXmlDoc, strDatasetName)) as XmlElement;
                            pRootElment = pRootElment.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("FeatureTypeTitle", m_newXmlDoc, strDatasetName)) as XmlElement;
                        }
                        pRender.GetRendXmlNode(m_newXmlDoc, pRootElment);
                    }
                    #endregion
                    if (bDoOneLayer == false)
                    {
                        CommXmlHandle.SaveDoc(m_newXmlDoc, sldFileName);
                    }
                }
                if (bDoOneLayer == true)
                {
                    CommXmlHandle.SaveDoc(m_newXmlDoc, sldFileName);
                }
                return(true);
            }
            catch (Exception ex)
            {
                m_WriteLog(string.Format("SLD文件写入错误:方法名称【{0}】{1}{2}{3}{4}", "WriteToSLD", Environment.NewLine, ex.Message, Environment.NewLine, ex.StackTrace));
                return(false);
            }
        }
Ejemplo n.º 8
0
        public override XmlElement GetRendXmlNode(XmlDocument xmlDoc, XmlElement RootXmlElement)
        {
            try
            {
                //如果有标注,则添加标注信息
                XmlElement pAnnotationElment = null;
                if (AnnotationClass.IsSingleProperty && !string.IsNullOrEmpty(AnnotationClass.PropertyName))
                {
                    pAnnotationElment = AnnotationClass.GetSymbolNode(xmlDoc);
                }
                //开始解析渲染符号信息
                for (int i = 0; i < SymbolList.Count; i++)
                {
                    XmlElement    pRuleElement = default(XmlElement);
                    ptSymbolClass pSymbolClass = SymbolList[i];
                    //生成Rule节点信息
                    pRuleElement = CommXmlHandle.CreateElement("Rule", xmlDoc);
                    pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("RuleName", xmlDoc, pSymbolClass.Label));
                    pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("Title", xmlDoc, pSymbolClass.Label));
                    if (pSymbolClass.LowerLimit != 0.00 && pSymbolClass.UpperLimit != 0.00)
                    {
                        //写条件节点
                        XmlElement pFilterElement  = CommXmlHandle.CreateElement("Filter", xmlDoc);
                        XmlElement pBetweenElement = CommXmlHandle.CreateElement("PropertyIsBetween", xmlDoc);
                        pFilterElement.AppendChild(pBetweenElement);
                        XmlElement pPropertyNameElement = CommXmlHandle.CreateElementAndSetElemnetText("PropertyName", xmlDoc, this.FieldName);
                        pBetweenElement.AppendChild(pPropertyNameElement);
                        XmlElement pLowerBoundaryElement = CommXmlHandle.CreateElement("LowerBoundary", xmlDoc);
                        pBetweenElement.AppendChild(pLowerBoundaryElement);
                        XmlElement pLowerValue = CommXmlHandle.CreateElementAndSetElemnetText("", xmlDoc, CommStaticClass.CommaToPoint(pSymbolClass.LowerLimit));
                        pLowerBoundaryElement.AppendChild(pLowerValue);

                        XmlElement pUpperElement = CommXmlHandle.CreateElement("UpperBoundary", xmlDoc);
                        pBetweenElement.AppendChild(pUpperElement);
                        XmlElement pUpperValueElement = CommXmlHandle.CreateElementAndSetElemnetText("Fieldvalue", xmlDoc, CommStaticClass.CommaToPoint(pSymbolClass.UpperLimit));
                        pUpperElement.AppendChild(pUpperValueElement);

                        pRuleElement.AppendChild(pFilterElement);
                    }
                    //设置显示比例尺
                    if (!double.IsNaN(m_ptLayer.m_MaxScale) && !double.IsNaN(m_ptLayer.m_MinScale))
                    {
                        pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("MinScale", xmlDoc, m_ptLayer.m_MaxScale.ToString()));
                        pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("MaxScale", xmlDoc, m_ptLayer.m_MinScale.ToString()));
                    }
                    //获取符号节点
                    IList <XmlElement> pSymbolizedNode = pSymbolClass.GetSymbolNode(xmlDoc);
                    foreach (XmlElement pElement in pSymbolizedNode)
                    {
                        pRuleElement.AppendChild(pElement);
                    }
                    if (pAnnotationElment != null)
                    {
                        pRuleElement.AppendChild(pAnnotationElment.CloneNode(true));
                    }
                    RootXmlElement.AppendChild(pRuleElement);
                }
            }
            catch (Exception ex)
            {
                ptLogManager.WriteMessage(string.Format("解析符号信息失败:{0}{1}{2}{3}", Environment.NewLine, ex.Message, Environment.NewLine, ex.StackTrace));
            }
            return(RootXmlElement);
        }
Ejemplo n.º 9
0
 public override XmlElement GetRendXmlNode(XmlDocument xmlDoc, XmlElement RootXmlElement)
 {
     try
     {
         XmlElement pAnnotationElment = null;
         //如果有标注,则添加标注信息
         if (AnnotationClass.IsSingleProperty && !string.IsNullOrEmpty(AnnotationClass.PropertyName))
         {
             pAnnotationElment = AnnotationClass.GetSymbolNode(xmlDoc);
         }
         //开始解析渲染符号信息
         for (int i = 0; i < SymbolList.Count; i++)
         {
             XmlElement    pRuleElement = default(XmlElement);
             ptSymbolClass pSymbolClass = SymbolList[i];
             //生成Rule节点信息
             pRuleElement = CommXmlHandle.CreateElement("Rule", xmlDoc);
             pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("RuleName", xmlDoc, pSymbolClass.Label));
             pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("Title", xmlDoc, pSymbolClass.Label));
             XmlElement pFilterElement = CommXmlHandle.CreateElement("Filter", xmlDoc);
             //设置符号选择器
             //多字段多值组合符号
             if (this.FieldCount > 1)
             {
                 XmlElement pAndElement = CommXmlHandle.CreateElement("And", xmlDoc);
                 for (int l = 0; l <= FieldCount - 1; l++)
                 {
                     XmlElement pEqualToElment = CommXmlHandle.CreateElement("PropertyIsEqualTo", xmlDoc);
                     pEqualToElment.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("PropertyName", xmlDoc, FieldNames[l]));
                     pEqualToElment.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("Fieldvalue", xmlDoc, pSymbolClass.Fieldvalues[l]));
                     pAndElement.AppendChild(pEqualToElment);
                 }
                 pFilterElement.AppendChild(pAndElement);
             }
             //单字段多值同一符号
             else if (FieldCount == 1)
             {
                 XmlElement pOrElement = default(XmlElement);
                 if (pSymbolClass.Fieldvalues.Count > 1)
                 {
                     pOrElement = CommXmlHandle.CreateElement("Or", xmlDoc);
                 }
                 for (int l = 0; l <= pSymbolClass.Fieldvalues.Count - 1; l++)
                 {
                     if (pSymbolClass.Fieldvalues.Count > 1)
                     {
                         XmlElement pEqualToElment = CommXmlHandle.CreateElement("PropertyIsEqualTo", xmlDoc);
                         pEqualToElment.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("PropertyName", xmlDoc, FieldNames[l]));
                         pEqualToElment.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("Fieldvalue", xmlDoc, pSymbolClass.Fieldvalues[l]));
                         pOrElement.AppendChild(pEqualToElment);
                     }
                     else
                     {
                         XmlElement pEqualToElment = CommXmlHandle.CreateElement("PropertyIsEqualTo", xmlDoc);
                         pEqualToElment.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("PropertyName", xmlDoc, FieldNames[l]));
                         pEqualToElment.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("Fieldvalue", xmlDoc, pSymbolClass.Fieldvalues[l]));
                         pFilterElement.AppendChild(pEqualToElment);
                     }
                 }
                 if (pSymbolClass.Fieldvalues.Count > 1)
                 {
                     pFilterElement.AppendChild(pOrElement);
                 }
             }
             pRuleElement.AppendChild(pFilterElement);
             //设置显示比例尺
             if (!double.IsNaN(m_ptLayer.m_MaxScale) && !double.IsNaN(m_ptLayer.m_MinScale))
             {
                 pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("MinScale", xmlDoc, m_ptLayer.m_MaxScale.ToString()));
                 pRuleElement.AppendChild(CommXmlHandle.CreateElementAndSetElemnetText("MaxScale", xmlDoc, m_ptLayer.m_MinScale.ToString()));
             }
             //获取符号节点
             IList <XmlElement> pSymbolizedNode = pSymbolClass.GetSymbolNode(xmlDoc);
             foreach (XmlElement pElement in pSymbolizedNode)
             {
                 pRuleElement.AppendChild(pElement);
             }
             //写注记节点
             if (pAnnotationElment != null)
             {
                 pRuleElement.AppendChild(pAnnotationElment.CloneNode(true));
             }
             RootXmlElement.AppendChild(pRuleElement);
         }
     }
     catch (Exception ex)
     {
         ptLogManager.WriteMessage(string.Format("解析符号信息失败:{0}{1}{2}{3}", Environment.NewLine, ex.Message, Environment.NewLine, ex.StackTrace));
     }
     return(RootXmlElement);
 }