解析KML文件并提取coordinates中的经纬度坐标信息

解析KML⽂件并提取coordinates中的经纬度坐标信息从googleEarh导出的kml⽂件小型洗衣粉生产设备
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="www.opengis/kml/2.2" xmlns:gx="le/kml/ext/2.2">
<Document>
<!-- Begin Style Definitions -->
<Style id="line1">
<LineStyle>
<color>FF808080</color>
<width>1</width>
</LineStyle>
</Style>
<Folder>
<name>Line Features</name>
<description>Line Features</description>
<Placemark>
<description>Unclassified Line Feature</description>
<styleUrl>#line1</styleUrl>
<LineString>
<coordinates>
115.9676728167,40.4840735806,0
115.9537842111,40.4823857889,0
115.9563131444,40.4703987611,0
115.9551753833,40.4662973972,0
115.9554458000,40.4636396361,0
115.9397187972,40.4622803889,0
115.9405904556,40.4562066889,0
115.9408371611,40.4549313694,0
115.9422346222,40.4538901583,0
115.9448324639,40.4514630028,0
115.9574561306,40.4524817889,0
115.9619367944,40.4513946639,0
</coordinates>
</LineString>
</Placemark>
</Folder>
</Document>
该边
</kml>
做⼯程中遇到需要解析kml⽂件并提取其中的经纬度坐标信息的需求,从⽹上查了⼀圈资料发现都不好⽤,⼲脆⾃⼰写,⽤正则表达式regex和split()⽅法实现了坐标信息提取功能。
主要遇到的问题是coordinates中的InnerText⽂本中有\t  \n \r \f 或多空格问题,需要将这些因素排除。
\f 匹配⼀个换页符
\n 匹配⼀个换⾏符
\r 匹配⼀个回车符
\t 匹配⼀个制表符
这些符号⽤正则表达式字符替换⽅式直接清除
Regex reg = new Regex("\f|\n|\r|\t");
string modified = reg.Replace(tt, "");
多空格问题⽤split的StringSplitOptions.RemoveEmptyEntries来清除
string[] ss = modified.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);//清除空格
这样就能得到纯粹的x,y,z字符串数组了.OK。
***********************************************************************************************************************************************
想了2种思路,⽬前第1种思路已经测试通过了,第2种思路懒得写了,哪位如果有兴趣实现了的话告诉我⼀声喔,,也算是饮⽔思源啦。
************************************************************************************************************************************************
代码如下:
玻璃瓶网
private void KMLFileLoadButton_Click(object sender, EventArgs e)
{// 读取googleEarth的导出的kml/kmz路径⽂件
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "KML⽂件(*.kml)|*.kml|所有⽂件|*.*";
if (dlg.ShowDialog() != DialogResult.OK)
return;
string destPath = dlg.FileName;//CopyToRelavitePath(dlg.FileName);
if (destPath == null)
return;
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(destPath);
XmlElement root = xmldoc.DocumentElement;
/
规范命名空间
XmlNode _document = root.GetElementsByTagName("Document")[0];
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmldoc.NameTable);
if (_document== null || _document.Attributes["xmlns"]==null)
{
nsmgr.AddNamespace("ns", root.Attributes["xmlns"].Value);
}
else
{
nsmgr.AddNamespace("ns", _document.Attributes["xmlns"].Value);
}
电锅炉制造
NGlbLine geo = new NGlbLine(3, false);
XmlNodeList xmlmark = root.GetElementsByTagName("Placemark");
for (int m = 0; m < xmlmark.Count; m++)
{
XmlNodeList xmlmarkChilds = xmlmark[m].ChildNodes;
for (int n = 0; n < xmlmarkChilds.Count; n++)
{
电动粉扑XmlNode node = xmlmarkChilds[n];
if (node.Name == "LineString" || node.Name == "LineRing")
{
XmlNode coordsNode = node.FirstChild;
www.6711while (coordsNode != null && coordsNode.Name != "coordinates")
{
coordsNode = coordsNode.NextSibling;
}
if (coordsNode == null)
continue;
// 思路1 :⽤正则表达式去除字符串⾸位的制表符、换⾏符等符号,然后⽤' '来划分为string[]
string tt = coordsNode.InnerText;
Regex reg = new Regex("\f|\n|\r|\t");
string modified = reg.Replace(tt, "");
string[] ss = modified.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);//清除空格
for (int cc = 0; cc < ss.Length; cc++)
{
string[] aa = ss[cc].Split(',');
if (aa.Length == 3)
geo.AddPoint(Convert.ToDouble(aa[0]), Convert.ToDouble(aa[1]),
Convert.ToDouble(aa[2]));
else if (aa.Length == 2)
geo.AddPoint(Convert.ToDouble(aa[0]), Convert.ToDouble(aa[1]), 0);                                                                              }
// 思路2 :⽤regex正则表达式匹配 类似 115.9676728167,40.4840735806,0的样式字段
}
}
}
  .............................................
}

本文发布于:2024-09-23 17:15:47,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/252278.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:坐标   匹配   需要
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议