2016-08-17 198 views
1

我在目錄中生成了許多kml文件。以編程方式在C#中創建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

作爲一個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 文件,你不能確定哪一個將被首先發現的,所以你需要 唯一一個包括。)

+0

感謝阿爾貝託。在創建kmz文件時,它只顯示doc.kml文件的內容。當我要存檔許多kml文件時,它也可以工作。我使用我正在使用的方法更新了原始帖子。 – nader