日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c# 采用XML的方式读取OSM文件

發布時間:2024/3/7 C# 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# 采用XML的方式读取OSM文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OSM文件類似于XML文件的格式,可以通過XML的方式讀取出來

1、OSM文件:

<?xml version='1.0' encoding='UTF-8'?> <osm version="0.6" generator="osmconvert 0.8.5"> <bounds minlat="-41.98399" minlon="-73.89404" maxlat="-32.84267" maxlon="-70.92773"/> <node id="13698430" lat="-34.2911861" lon="-71.3101819" version="2" timestamp="2010-11-27T14:02:18Z" changeset="6470051" uid="337684" user="felipeedwards"/> <node id="13698430" lat="-34.2911941" lon="-71.3101193" version="3" timestamp="2010-12-13T00:22:55Z" changeset="6643617" uid="337684" user="felipeedwards"/> <node id="50026147" lat="-33.0228196" lon="-71.5509851" version="3" timestamp="2008-03-16T03:48:24Z" changeset="330702" uid="30854" user="Zambelli Limitada"> <tag k="name" v="Vi?a del Mar"/> <tag k="is_in" v="Chile, Latin America"/> <tag k="place" v="city"/> <tag k="created_by" v="Potlatch 0.7b"/> </node> <node id="50026147" lat="-33.0244675" lon="-71.5515995" version="4" timestamp="2008-03-18T06:04:36Z" changeset="348809" uid="30854" user="Zambelli Limitada"> <tag k="name" v="Vi?a del Mar"/> <tag k="is_in" v="Chile, Latin America"/> <tag k="place" v="city"/> <tag k="created_by" v="Potlatch 0.7b"/> </node> <way id="23456524" version="1" timestamp="2008-03-26T02:18:52Z" changeset="397290" uid="30854" user="Zambelli Limitada"> <nd ref="254026575"/> <nd ref="254026576"/> <nd ref="254026577"/> <tag k="name" v="2 Oriente"/> <tag k="oneway" v="yes"/> <tag k="highway" v="residential"/> <tag k="created_by" v="Potlatch 0.8"/> </way> <way id="23456524" version="2" timestamp="2008-03-26T02:19:09Z" changeset="397290" uid="30854" user="Zambelli Limitada"> <nd ref="254026580"/> <nd ref="254026581"/> <nd ref="254026575"/> <nd ref="254026576"/> <nd ref="254026577"/> <tag k="name" v="2 Oriente"/> <tag k="oneway" v="yes"/> <tag k="highway" v="residential"/> <tag k="created_by" v="Potlatch 0.8"/> </way> <relation id="4296616" version="1" timestamp="2014-12-21T20:14:43Z" changeset="27617220" uid="695793" user="quadero"> <member type="way" ref="304321808" role="outer"/> <member type="way" ref="304279235" role="outer"/> <member type="way" ref="304279236" role="outer"/> <tag k="name" v="Universidad de La Frontera"/> <tag k="type" v="multipolygon"/> <tag k="amenity" v="university"/> <tag k="addr:city" v="Temuco"/> <tag k="addr:street" v="Francisco Salazar"/> <tag k="addr:housenumber" v="01145"/> </relation> <relation id="4296667" version="1" timestamp="2014-12-21T20:25:40Z" changeset="27617430" uid="695793" user="quadero"> <member type="way" ref="307633498" role="outer"/> <member type="way" ref="307633497" role="outer"/> <member type="way" ref="307633496" role="outer"/> <tag k="type" v="multipolygon"/> <tag k="amenity" v="parking"/> </relation> </osm>

2、代碼:

public void XmlParse(XmlReader source) { string pointOsmId =""; string pointLat = ""; string pointLon = ""; string pointVersion = ""; string pointTimestamp = ""; string pointChangeset = ""; string pointUserid = ""; string pointUsername = ""; string wayOsmId = ""; string wayVersion = ""; string wayTimestamp = ""; string wayChangeset = ""; string wayUserid = ""; string wayUsername = ""; string reationOsmId = ""; string reationVersion = ""; string reationTimestamp = ""; string reationChangeset = ""; string reationUserid = ""; string reationUsername = ""; while (source.Read()) { if (source.NodeType == XmlNodeType.Element &&source.Name == "node") { pointOsmId = source.GetAttribute("id"); pointLat = source.GetAttribute("lat"); pointLon = source.GetAttribute("lon"); pointVersion = source.GetAttribute("version"); pointTimestamp = source.GetAttribute("timestamp"); pointChangeset = source.GetAttribute("changeset"); pointUserid = source.GetAttribute("uid"); pointUsername = source.GetAttribute("user"); string content = source.ReadInnerXml(); string tagFormated = string.Format("<tag>{0}</tag>", content); XElement element = XElement.Parse(tagFormated); int tagCount=element.Elements().Count(); string tags = ""; int count = tagCount; while (tagCount>0) { tags += "key=" + element.Elements().ElementAt(count - tagCount).Attribute("k").Value + ",value=" + element.Elements().ElementAt(count - tagCount).Attribute("v").Value + ";"; tagCount--; } Console.WriteLine("Node osmId:" + pointOsmId); Console.WriteLine("Node pointLat:" + pointLat); Console.WriteLine("Node pointLon:" + pointLon); Console.WriteLine("Node pointVersion:" + pointVersion); Console.WriteLine("Node pointTimestamp:" + pointTimestamp); Console.WriteLine("Node pointChangeset:" + pointChangeset); Console.WriteLine("Node pointUserid:" + pointUserid); Console.WriteLine("Node pointUsername:" + pointUsername); Console.WriteLine("Node tags:" + tags); } if (source.NodeType == XmlNodeType.Element && source.Name == "way") { wayOsmId = source.GetAttribute("id"); wayVersion = source.GetAttribute("version"); wayTimestamp = source.GetAttribute("timestamp"); wayChangeset = source.GetAttribute("changeset"); wayUserid = source.GetAttribute("uid"); wayUsername = source.GetAttribute("user"); string content = source.ReadInnerXml(); string Formated = string.Format("<way>{0}</way>", content); XElement element = XElement.Parse(Formated); string pointsId = ""; string tags = ""; XmlReader r=element.CreateReader(); while( r.Read()){ if (r.NodeType == XmlNodeType.Element && r.Name == "nd") { pointsId += r.GetAttribute("ref").ToString() + ","; } else if (r.NodeType == XmlNodeType.Element && r.Name == "tag") { tags += "key=" + r.GetAttribute("k").ToString() + ",value=" + r.GetAttribute("v").ToString()+ ";"; } } Console.WriteLine("Way osmId:" + wayOsmId); Console.WriteLine("Way pointVersion:" + wayVersion); Console.WriteLine("Way pointTimestamp:" + wayTimestamp); Console.WriteLine("Way pointChangeset:" + wayChangeset); Console.WriteLine("Way pointUserid:" + wayUserid); Console.WriteLine("Way pointUsername:" + wayUsername); Console.WriteLine("Way pointsId:" + pointsId); Console.WriteLine("Way tags:" + tags); } if (source.NodeType == XmlNodeType.Element && source.Name == "relation") { reationOsmId = source.GetAttribute("id"); reationVersion = source.GetAttribute("version"); reationTimestamp = source.GetAttribute("timestamp"); reationChangeset = source.GetAttribute("changeset"); reationUserid = source.GetAttribute("uid"); reationUsername = source.GetAttribute("user"); string content = source.ReadInnerXml(); string Formated = string.Format("<relation>{0}</relation>", content); XElement element = XElement.Parse(Formated); string member = ""; string tags = ""; XmlReader r=element.CreateReader(); while (r.Read()) { if (r.NodeType == XmlNodeType.Element && r.Name == "member") { member = r.GetAttribute("type").ToString() + "," + r.GetAttribute("ref").ToString() + "," + r.GetAttribute("role").ToString() + ";"; } else if (r.NodeType == XmlNodeType.Element && r.Name == "tag") { tags += "key=" + r.GetAttribute("k").ToString() + ",value=" + r.GetAttribute("v").ToString() + ";"; } } Console.WriteLine("relation osmId:" + reationOsmId); Console.WriteLine("relation pointVersion:" + reationVersion); Console.WriteLine("relation pointTimestamp:" + reationTimestamp); Console.WriteLine("relation pointChangeset:" + reationChangeset); Console.WriteLine("relation pointUserid:" + reationUserid); Console.WriteLine("relation pointUsername:" + reationUsername); Console.WriteLine("relation member:" + member); Console.WriteLine("relation tags:" + tags); } } }

3、輸出

  • Node?osmId:13698430??
  • Node?pointLat:-34.2911861??
  • Node?pointLon:-71.3101819??
  • Node?pointVersion:2??
  • Node?pointTimestamp:2010-11-27T14:02:18Z??
  • Node?pointChangeset:6470051??
  • Node?pointUserid:337684??
  • Node?pointUsername:felipeedwards??
  • Node?tags:??
  • Node?osmId:13698430??
  • Node?pointLat:-34.2911941??
  • Node?pointLon:-71.3101193??
  • Node?pointVersion:3??
  • Node?pointTimestamp:2010-12-13T00:22:55Z??
  • Node?pointChangeset:6643617??
  • Node?pointUserid:337684??
  • Node?pointUsername:felipeedwards??
  • Node?tags:??
  • Node?osmId:50026147??
  • Node?pointLat:-33.0228196??
  • Node?pointLon:-71.5509851??
  • Node?pointVersion:3??
  • Node?pointTimestamp:2008-03-16T03:48:24Z??
  • Node?pointChangeset:330702??
  • Node?pointUserid:30854??
  • Node?pointUsername:Zambelli?Limitada??
  • Node?tags:key=name,value=Vi?a?del?Mar;key=is_in,value=Chile,?Latin?America;key=place,value=city;key=created_by,value=Potlatch?0.7b;??
  • Node?osmId:50026147??
  • Node?pointLat:-33.0244675??
  • Node?pointLon:-71.5515995??
  • Node?pointVersion:4??
  • Node?pointTimestamp:2008-03-18T06:04:36Z??
  • Node?pointChangeset:348809??
  • Node?pointUserid:30854??
  • Node?pointUsername:Zambelli?Limitada??
  • Node?tags:key=name,value=Vi?a?del?Mar;key=is_in,value=Chile,?Latin?America;key=place,value=city;key=created_by,value=Potlatch?0.7b;??
  • Way?osmId:23456524??
  • Way?pointVersion:1??
  • Way?pointTimestamp:2008-03-26T02:18:52Z??
  • Way?pointChangeset:397290??
  • Way?pointUserid:30854??
  • Way?pointUsername:Zambelli?Limitada??
  • Way?pointsId:254026575,254026576,254026577,??
  • Way?tags:key=name,value=2?Oriente;key=oneway,value=yes;key=highway,value=residential;key=created_by,value=Potlatch?0.8;??
  • Way?osmId:23456524??
  • Way?pointVersion:2??
  • Way?pointTimestamp:2008-03-26T02:19:09Z??
  • Way?pointChangeset:397290??
  • Way?pointUserid:30854??
  • Way?pointUsername:Zambelli?Limitada??
  • Way?pointsId:254026580,254026581,254026575,254026576,254026577,??
  • Way?tags:key=name,value=2?Oriente;key=oneway,value=yes;key=highway,value=residential;key=created_by,value=Potlatch?0.8;??
  • relation?osmId:4296616??
  • relation?pointVersion:1??
  • relation?pointTimestamp:2014-12-21T20:14:43Z??
  • relation?pointChangeset:27617220??
  • relation?pointUserid:695793??
  • relation?pointUsername:quadero??
  • relation?member:way,304279236,outer;??
  • relation?tags:key=name,value=Universidad?de?La?Frontera;key=type,value=multipolygon;key=amenity,value=university;key=addr:city,value=Temuco;key=addr:street,value=Francisco?Salazar;key=addr:housenumber,value=01145;??
  • relation?osmId:4296667??
  • relation?pointVersion:1??
  • relation?pointTimestamp:2014-12-21T20:25:40Z??
  • relation?pointChangeset:27617430??
  • relation?pointUserid:695793??
  • relation?pointUsername:quadero??
  • relation?member:way,307633496,outer;??
  • relation?tags:key=type,value=multipolygon;key=amenity,value=parking; ?





  • 總結

    以上是生活随笔為你收集整理的c# 采用XML的方式读取OSM文件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。