我正在使用http://www.icsharpcode.net/opensource/sharpziplib/编写C#程序 压缩为zip文件的KMZ文件将包含KML文件和图标。
我的尝试:
关于压缩过程中我做错了什么的任何想法会导致图标最初没有显示?
答案 0 :(得分:3)
使用CSharpZipLib创建KMZ文件以正确使用Google地球的一个技巧是关闭与Google地球不兼容的Zip64模式。
要使KMZ文件在Google地球和其他地球浏览器中可互操作,它必须使用“传统”压缩方法(例如deflate)与ZIP 2.0兼容,而不使用Zip64等扩展。 KML Errata中提到了此问题。
以下是创建KMZ文件的C#代码片段:
using (FileStream fileStream = File.Create(ZipFilePath)) // Zip File Path (String Type)
{
using (ZipOutputStream zipOutputStream = new ZipOutputStream(fileStream))
{
// following line must be present for KMZ file to work in Google Earth
zipOutputStream.UseZip64 = UseZip64.Off;
// now normally create the zip file as you normally would
// add root KML as first entry
ZipEntry zipEntry = new ZipEntry("doc.kml");
zipOutputStream.PutNextEntry(zipEntry);
//build you binary array from FileSystem or from memory...
zipOutputStream.write(/*binary array*/);
zipOutputStream.CloseEntry();
// next add referenced file entries (e.g. icons, etc.)
// ...
//don't forget to clean your resources and finish the outputStream
zipOutputStream.Finish();
zipOutputStream.Close();
}
}