在C#中以编程方式从KML文件创建KMZ文件

时间:2016-08-17 15:24:51

标签: c# kml google-earth kmz

我在目录中生成了一些kml文件。

我想知道是否有办法在C#中以编程方式将它们全部分组到kmz文件中。在Google地球中显示名称和说明。

谢谢和最诚挚的问候,

private static void combineAllKMLFilesULHR(String dirPath)
{
    string kmzPath = "outputULHR.kmz";

    string appPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    string rootKml = appPath + @"\" + dirPath + @"\doc.kml";
    Console.WriteLine(appPath + @"\"+ dirPath);
    String[] filepaths = Directory.GetFiles(appPath + @"\" + dirPath);

    using (ZipArchive archive = ZipFile.Open(kmzPath, ZipArchiveMode.Create))
    {
        archive.CreateEntryFromFile( rootKml, "doc.kml");
        foreach (String file in filepaths)
        {
            Console.WriteLine(file);
            if(!file.Equals(rootKml))
                archive.CreateEntryFromFile( file, Path.GetFileName(file) );
        }
    }
}

1 个答案:

答案 0 :(得分:1)

将KMZ文件作为zip存档,您可以使用ZipArchive类来生成它。

string kmzPath = "output.kmz";
string rootKml = "doc.kml";
string referencedKml = "someother.kml";

using (ZipArchive archive = ZipFile.Open(kmzPath, ZipArchiveMode.Create))
{
    archive.CreateEntryFromFile(rootKml, "doc.kml");
    archive.CreateEntryFromFile(referencedKml, "someother.kml");
} 

请记住将{默认kml命名为 doc.kml ,来自documentation

  

放置默认的KML文件(doc.kml,或者您想要提供的任何名称)   它)在这个文件夹的顶层。仅包含一个.kml文件。   (当Google地球打开KMZ文件时,它会扫描文件,寻找   此列表中的第一个.kml文件。它会忽略所有后续的.kml   存档中的文件(如果有)。如果存档包含多个.kml   文件,你不能确定首先找到哪一个,所以你需要   只包括一个。)