点采集操作消息体封装与解译1

Posted liuwenzhen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点采集操作消息体封装与解译1相关的知识,希望对你有一定的参考价值。

项目:基于GIS操作语义的制图系统

需求:将点采集操作封装,写入和读取XML

1 xml结构设计

<?xml version="1.0" ecoding="UTF-8">
<Project ID="">
	<CooperationMap ID="">
		<Layer Name="" Type="">
			<Point Operation=""></Point>
		</Layer>
	</CooperationMap>
</Project>
<工程 ID=“”>
	<协作区域 ID="”>
		<图层 名称="" 类型=“点”>
			<点 操作类型="采集">坐标信息<点>
		</图层>
	</协作区域ID>
</工程ID>

2 消息体封装

public enum OperationEnum
{
    Add,
    Remove
}
class OperationInformation
{
    public string Project { get; set; }
    public string CooperationMap { get; set; }
    public string LayerName { get; set; }
    public string LayerType { get; set; }
    public OperationEnum OperationEnum { get; set; }
    public IPointCollection PointCollection;
}

几何(Geometry)属性用点集(IPointCollection)存储。

3 读写xml

写入xml

public void WriteXML(string absolutePath)
{
    IPoint point = PointCollection.get_Point(0);
    //创建节点
    XElement project = new XElement("Project",
                                    new XAttribute("ID", this.Project));
    XElement cooperationMap = new XElement("CooperationMap",
                                           new XAttribute("ID", this.CooperationMap));
    XElement layer = new XElement("Layer",
                                  new XAttribute("Name", this.LayerName),
                                  new XAttribute("Type", this.LayerType));
    XElement geometry = new XElement("Point",
                                     new XAttribute("Operation", this.OperationEnum),
                                     point.X," ", point.Y);
    //添加节点
    project.Add(cooperationMap);
    cooperationMap.Add(layer);
    layer.Add(geometry);
    //保存
    project.Save(absolutePath);
}

读取xml

public void ReadXML(string absolutePath)
{
    //加载文档
    XDocument document = XDocument.Load(absolutePath);
    //获取节点
    XElement project = document.Root;
    XElement cooperationMap = project.Element("CooperationMap");
    XElement layer = cooperationMap.Element("Layer");
    XElement geometry = layer.Element("Point");
    //获取参数
    this.Project = project.Attribute("ID").Value;
    this.CooperationMap = cooperationMap.Attribute("ID").Value;
    this.LayerName = layer.Attribute("Name").Value;
    this.LayerType = layer.Attribute("Type").Value;
    //字符串转枚举
    this.OperationEnum = (OperationEnum)Enum.Parse(typeof(OperationEnum), geometry.Attribute("Operation").Value);
    string[] sPoint = geometry.Value.Split(‘ ‘);
    IPoint point = new PointClass();
    point.X = double.Parse(sPoint[0]);
    point.Y = double.Parse(sPoint[1]);
    this.PointCollection = new PolylineClass();
    this.PointCollection.AddPoint(point);
}

引用

private void m_EngineEditEvent_OnSketchFinished()
{
    string relatePath = Application.StartupPath + @"......Data789.xml";
    string absolutePath = System.IO.Path.GetFullPath(relatePath);
    OperationInformation operationInformation = new OperationInformation()
    {
        Project = "123",
        CooperationMap = "123",
        LayerName = axMapControl1.get_Layer(0).Name,
        LayerType = "Point",
        OperationEnum = OperationEnum.Add,
    };
    operationInformation.PointCollection = new PolygonClass();
    operationInformation.PointCollection.AddPoint(point);
    operationInformation.WriteXML(absolutePath);
}

private void 读取xmlToolStripMenuItem_Click(object sender, EventArgs e)
{
    OperationInformation operationInformation = new OperationInformation();
    string relatePath = Application.StartupPath + @"......Data789.xml";
    string absolutePath = System.IO.Path.GetFullPath(relatePath);
    operationInformation.ReadXML(absolutePath);
}

以上是关于点采集操作消息体封装与解译1的主要内容,如果未能解决你的问题,请参考以下文章

回归 | js实用代码片段的封装与总结(持续更新中...)

第七周收获

初级函数

第四篇 函数

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段

--hook,某电商(bao)app签名实现数据采集,欢迎交流