1

我有以下 kml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.x">
   <Placemark>
   <name>My Home</name>
   <description>Here is the place where I live</description>
   <Point>
    <coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
   </Point>
</Placemark>

我想解析上述文件中地标的经度和纬度。

4

1 回答 1

0

我感觉到你的痛苦......我花了很长时间来实现我正在做的事情。下面是一个从 .kml 文件解析纬度和经度值的快速示例:

从存储纬度和经度值的地方开始:

public class Location
    {
        public float Latitude { get; set; }
        public float Longitude { get; set; }
    }

然后从您的 .kml 文件中获取流(在我的情况下,我一直使用相同的 .kml 文件并将其放在我的项目中,并将其构建操作设置为 'Embedded Resource' :

Stream stream = GetType().Assembly.GetManifestResourceStream("MyNamespace.Filename.kml");
List<Location> locations = ParseLocations(stream);

这是 ParseLocations 的实现:

public static List<Location> ParseLocations(Stream stream)
{
    List<Location> locationList = new List<Location>();
    var doc = XDocument.Load(stream);
    XNamespace ns = "http://earth.google.com/kml/2.1";
    var result = doc.Root.Descendants(ns + "Placemark");
    foreach (XElement xmlTempleInfo in result)
    {
        var point = xmlTempleInfo.Element(ns + "Point");
        string[] coordinates = point.Element(ns + "coordinates").Value.Split(",".ToCharArray());

        locationList.Add(new Location()
        {
           Latitude = float.Parse(coordinates[1])
           Longitude = float.Parse(coordinates[0]),
        });
    }

    return locationList;
}
于 2013-10-11T14:50:47.167 回答