【发布时间】:2015-05-26 10:45:10
【问题描述】:
我可以使用此代码读取和获取 KML 数据地标值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
List<XElement> placemarks = doc.Descendants().Where(x => x.Name.LocalName == "Placemark").ToList();
List<string> states = placemarks.Descendants().Where(x => x.Name.LocalName == "name").Select(x => x.Value).ToList();
}
}
}
但如果KML数据有以下详细信息,我不知道如何获取:
-
示例:阿拉巴马州 KML 格式类似
<Polygon> <outerBoundaryIs> <LinearRing> <coordinates>-85.070067,31.980703,0.0 -85.11515,31.907425,0.0 -85.135567,31.854884,0.0 -85.0567,32.017377,0.0 -85.070067,31.980703,0.0</coordinates> </LinearRing> </outerBoundaryIs> </Polygon> -
示例:德克萨斯州 KML 格式,如
<MultiGeometry> <Polygon> <outerBoundaryIs> <LinearRing> <coordinates>-161.333785,58.703653</coordinates> </LinearRing> </outerBoundaryIs> </Polygon> <Polygon> <outerBoundaryIs> <LinearRing> <coordinates>-131.594177,55.106316,55.23548,0.0</coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </MultiGeometry>
我尝试了这个LINQ 程序来获取多边形值:
List<string> states = placemarks.Descendants().Where(x => x.Name.LocalName == "Polygon").Select(x => x.Value).ToList();
输出:
-85.070067,31.980703,0.0 -85.11515,31.907425,0.0 -85.135567,31.854884,0.0 -85.0567,32.017377,0.0 -85.070067,31.980703,0.0
在我尝试替换如下所示格式的坐标并将它们复制/粘贴到融合表位置预览中后,地图完全按预期工作。
<Polygon> <outerBoundaryIs> <LinearRing> <coordinates>-85.070067,31.980703,0.0 -85.11515,31.907425,0.0 -85.135567,31.854884,0.0 -85.0567,32.017377,0.0 -85.070067,31.980703,0.0</coordinates> </LinearRing> </outerBoundaryIs> </Polygon>
但是当我尝试使用相同的方式获取 Multigeometry 值时:
List<string> states = placemarks.Descendants().Where(x => x.Name.LocalName == "MultiGeometry").Select(x => x.Value).ToList();
我得到了这个输出:
-161.333785,58.703653 -131.594177,55.106316,55.23548,0.0
但我不知道如何获取详细信息。
【问题讨论】: