[英]Extract Polygon name and coordinates from a KML using VB.NET
我整天都在尝试编写一些代码,这些代码将从包含Google Earth多边形的kml中读取数据,并提取名称和坐标并将所有内容存储为纬度和经度。 我已经制作了一个用户表单,该表单允许用户浏览kml,然后运行提取代码。 不幸的是提取不起作用。 我是VB的新手,但我确实在大学里学了三个学期的C ++,但自那时以来已经快一年了。 这是我所拥有的,但我知道我也可能完全错了。
Function X(InputFile As String, Text As String)
Dim textReader As New Xml.XmlTextReader(InputFile)
Dim lastElementName As String = ""
While textReader.Read()
Select Case textReader.NodeType
Case Xml.XmlNodeType.Element
lastElementName = textReader.Name
Case Xml.XmlNodeType.Text
MsgBox(lastElementName & ": " & textReader.Value)
End Select
Console.WriteLine()
End While
KML基本示例:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Placemark>
<name>The Pentagon</name>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-77.05668055019126,38.87154239798456
-77.05542625960818,38.87167890344077
-77.05485125901024,38.87076535397792
-77.05577677433152,38.87008686581446
-77.05691162017543,38.87054446963351
-77.05668055019126,38.87154239798456
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</kml>
据我所知,您有以下子问题:
解析XML并提取名称和坐标。
将坐标拆分为某些数据结构。
对于步骤1,VB的LINQ to XML是最简单的方法。 以下工作代码示例应帮助您入门:
Imports <xmlns="http://www.opengis.net/kml/2.2">
Module Module1
Sub Main()
Dim xdata = New XDocument( _
<kml xmlns="http://www.opengis.net/kml/2.2">
<Placemark>
<name>The Pentagon</name>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-77.05668055019126,38.87154239798456
-77.05542625960818,38.87167890344077
-77.05485125901024,38.87076535397792
-77.05577677433152,38.87008686581446
-77.05691162017543,38.87054446963351
-77.05668055019126,38.87154239798456
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</kml>)
For Each p In xdata.Root.<Placemark>
Console.WriteLine("Name: " & p.<name>.Value)
For Each c In p...<coordinates>
Console.WriteLine("Coordinates: " & c.Value)
Next
Next
Console.ReadLine()
End Sub
End Module
一些说明:
XDocument.Load
而不是New XDocument
。 Imports
语句很重要,它必须与KML文件开头的xmlns声明匹配。 剩下的步骤2是练习,但是String.Split
(首先在换行符上,然后在逗号上)和String.Trim
(除去空白)应该可以使您轻松解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.