首先需要有基本的经纬度文件

    1. /// <summary>
    2. /// 保存kml文件
    3. /// </summary>
    4. /// <param name="overlayname"></param>
    5. private void SaveKml(string overlayname)
    6. {
    7. string filePath = FilePaths.Find(a => a.Contains(overlayname.Trim()));
    8. List<string[]> latlngs = new List<string[]>();
    9. ReadFormatTxt(filePath, ref latlngs);//读格式的文件返回经纬度
    10. filePath = filePath.Substring(0, filePath.LastIndexOf(".")) + ".kml";
    11. string s = "";
    12. foreach (string[] ss in latlngs)
    13. {
    14. s += string.Format("{0},{1},{2}", ss[0], ss[1], 0) + " ";
    15. }
    16. if (!string.IsNullOrEmpty(s))
    17. { SaveKml(filePath, s); }
    18. }
    19. private void SaveKml(string filepath, string xml)
    20. {
    21. //生成KML文件,注意大小写
    22. FileStream fs = new FileStream(filepath, FileMode.Create);
    23. XmlTextWriter w = new XmlTextWriter(fs, Encoding.UTF8);
    24. // 开始文档
    25. w.Formatting = System.Xml.Formatting.Indented;
    26. w.WriteStartDocument();
    27. w.WriteStartElement("kml", "http://www.opengis.net/kml/2.2");
    28. //开始一个元素
    29. w.WriteStartElement("Document");
    30. //添加子元素
    31. w.WriteElementString("name", "Paths");
    32. w.WriteElementString("description", "Examples of paths.");
    33. w.WriteStartElement("Style");
    34. //向先前创建的元素中添加一个属性
    35. w.WriteAttributeString("id", "yellowLineGreenPoly");
    36. w.WriteStartElement("LineStyle");
    37. w.WriteElementString("System.Drawing.Color", "7f00ffff");
    38. w.WriteElementString("width", "4");
    39. w.WriteEndElement();
    40. w.WriteStartElement("PolyStyle");
    41. w.WriteElementString("System.Drawing.Color", "7f00ffff");
    42. w.WriteEndElement();
    43. // 关闭style元素
    44. w.WriteEndElement();
    45. w.WriteStartElement("Placemark");
    46. w.WriteElementString("name", "Absolute Extruded");
    47. w.WriteElementString("description", "Transparent green wall with yellow outlines");
    48. w.WriteElementString("styleUrl", "#yellowLineGreenPoly");
    49. w.WriteStartElement("LineString");
    50. w.WriteElementString("extrude", "1");
    51. w.WriteElementString("tessellate", "1");
    52. w.WriteElementString("altitudeMode", "clampedToGround");
    53. w.WriteStartElement("coordinates");
    54. // 将路径坐标写在这里
    55. w.WriteString(xml);
    56. // 关闭所有元素
    57. w.WriteEndDocument();
    58. // 关闭流
    59. w.Close();
    60. fs.Close();
    61. }

    这句比较重要,可以把xml文件从一行的形式,改成正常的多行形式
    xmlWriter.Formatting = System.Xml.Formatting.Indented;