我在目录中生成了一些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) );
}
}
}
答案 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 文件,你不能确定首先找到哪一个,所以你需要 只包括一个。)