繁体   English   中英

使用VB.NET从KML提取多边形名称和坐标

[英]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>

据我所知,您有以下子问题:

  1. 解析XML并提取名称和坐标。

  2. 将坐标拆分为某些数据结构。


对于步骤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

一些说明:

剩下的步骤2是练习,但是String.Split (首先在换行符上,然后在逗号上)和String.Trim (除去空白)应该可以使您轻松解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM