【问题标题】:Extract Polygon name and coordinates from a KML using VB.NET使用 VB.NET 从 KML 中提取多边形名称和坐标
【发布时间】:2014-08-02 01:07:44
【问题描述】:

我整天都在尝试编写一些代码,这些代码将从包含谷歌地球多边形的 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>

【问题讨论】:

  • 欢迎来到 SO!不幸的是,就目前而言,您的问题太宽泛了。我怀疑这里的许多读者是否熟悉 KML 格式的细节。如果您可以提供要解析的 KML 文件的简短示例(简化为相关部分),也许会有所帮助。总的来说,我认为VB LINQ to XML 会帮助你解决你的问题,但如果没有细节就很难说。
  • 好的,谢谢您的建议,我在上面添加了一个非常简单的kml。

标签: .net xml vb.net kml google-earth


【解决方案1】:

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

  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(删除空格)应该可以让您轻松解决这个问题。

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2015-09-03
    • 2020-09-02
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多