我正在尝试显示一个KMZ文件,该文件位于受密码保护且端口不同于80的文件夹中。它看起来像这样:
http://localhost:8080/assets/data/3641
这将返回具有有效MIME类型的KMZ文件,如果我在浏览器中访问此链接,我可以在Google地球中保存并打开它。
Google地球的API为displaying KMZ/KML提供了以下方法:
我的第一次尝试是使用fetchKml,但这没有给出任何响应 - 它无声地失败。我很惊讶这被认为是插件的正常行为(为什么不抛出异常,或者提供第二个回调来处理错误?)。如果我以下列形式提供样本kmz,此方法可以正常工作:
http://localhost/somefile.kmz
我认为问题在于我的第一个网址受密码保护 - 如果没有登录会话,它会重定向到登录屏幕,我怀疑Google地球插件不会共享相同的浏览器会话浏览器 - 因此它会运行到登录屏幕并因为收到HTML文件而不是KMZ / KML而失败。
按下未取消,我做了另一个API方法解压缩服务器端的KMZ并返回KML字符串:
http://localhost:8080/assets/data/unzip/3641
这种方法的优点在于我编写自己的JavaScript来执行GET请求 - 它不通过Google Earth,因此我使用了已打开的登录会话并可以下载KMZ。缺点是KMZ可以包含KML文件可以引用的图像和音乐。就documentation而言,这些不能与KML字符串一起传递。
我的最后一次尝试是使用KmlNetworkLink和KmlLink。这与fetchKml具有相同的效果 - 没有任何反应。
更新:此外,在没有有效证书的情况下使用“https”时会失败。
答案 0 :(得分:1)
是的,问题是URL受密码保护。如果你这样使用它,你可以让fetchKml()
给出一些错误的指示:
google.earth.fetchKml(ge, 'http://localhost:8080/assets/data/3641
', finishFetchKml);
function finishFetchKml(kmlObject) {
// check if the KML was fetched properly
if (kmlObject) {
// add the fetched KML to Earth
currentKmlObject = kmlObject;
} else {
// setTimeout prevents a deadlock in some browsers
setTimeout(function() {
alert('Bad or null KML.');
}, 0);
}
}
Kml旨在成为一种免费的开放格式 - 如果您希望在安全系统上私下使用它,那么您应该使用enterprise version of the Google Earth Plugin。