用c#从KML文件编程创建KMZ文件

本文关键字:文件 编程 KMZ 创建 KML | 更新日期: 2023-09-27 18:02:59

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

我想知道是否有一种方法可以在c#中以编程方式将它们全部分组到kmz文件中。与名称和描述显示在谷歌地球。

感谢并致以最诚挚的问候

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) );
        }
    }
}

用c#从KML文件编程创建KMZ文件

作为压缩文件,您可以使用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 ,来自文档:

将默认的KML文件(doc。Kml,或者任何你想要的名字它)位于此文件夹的顶层。只包含一个.kml文件。(当Google Earth打开一个KMZ文件时,它会扫描文件,寻找此列表中的第一个.kml文件。它忽略所有后续的.kml存档中的文件(如果有的话)。如果归档文件包含多个.kml文件,您无法确定将首先找到哪个文件,因此您需要只包含一个)