/// <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); }
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); }
/// <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); } }
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); }
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); }