【问题标题】:Unable to load a local KMZ file into a browser with the google earth plugin using fetchkml function无法使用 fetchkml 函数将本地 KMZ 文件加载到带有谷歌地球插件的浏览器中
【发布时间】:2013-01-14 20:13:30
【问题描述】:

我们有一个 KMZ 文件,可以很好地加载到 Google 地球桌面应用程序中。没有错误。

当我们尝试使用 Google 地球插件做同样的事情时,它甚至不会从 fetchKml 函数返回。在本地文件上使用fetchKml 需要了解哪些特殊设置?

我正在尝试像这样加载文件:

// Where 'ge' is the Google Earth Plugin
var href = 'C:/KMLDATA/TEST.KMZ';
google.earth.fetchKml(ge, href, function(kml) { /* do something with kml */ });

【问题讨论】:

    标签: javascript kml google-earth google-earth-plugin kmz


    【解决方案1】:

    这与 Google 地球插件本身无关,而是与 JavaScript 沙箱有关。

    基本上,JavaScript 无法访问本地文件系统 - 因此您不能像代码中那样简单地使用本地文件的路径...

    var href = 'C:/KMLDATA/TEST.KMZ';
    google.earth.fetchKml(ge, href, function(kmlObject) { ... }
    

    要在浏览器中处理本地文件,您有多种选择。

    1. 设置本地文件服务器并通过 http 提供文件服务。这是 在任何操作系统中都相对容易做到。这样C:/KMLDATA/TEST.KMZ 可能 变成http://localhost/KMLDATA/TEST.KMZ

    2. 使用一些可以访问文件系统的“插件”对象。一点点 在所有浏览器上工作更加棘手和困难。某物 如 ActiveX、XPCOM、Signed Java 小程序等。I made an example of loading local .kml files 通过 ActiveX 进入插件 - 显然它只适用于 IE。

    3. 在 HTML5 中使用文件 api。很多代码,而不是我用 kml 实际尝试过的东西。 This tutorial 很透彻,涵盖了大部分方面。

    我想说,到目前为止,选项 1 是您最好的选择。设置本地文件服务器将允许您轻松加载和测试所有 kml/kmz 文件。

    如果这些都不可能或对您来说不合需要,那么就像其他人建议的那样,将文件托管在公共服务器上确实是唯一的选择。

    【讨论】:

    • 你有这个工作吗?据我了解,除非 Google 也可以访问该 URL,否则这在某些情况下是行不通的。如果我不正确,您也很高兴,因为选项 1 很容易做到,并且不必直接向公众公开某些内容。
    • 从这里:developers.google.com/kml/documentation/mapsSupport:当包含大量特征(地标、多边形、线)的 KML 内容被加载到 Google 地图中时,服务器端会决定是否渲染服务器或用户 Web 浏览器中的文档功能。用户体验,包括功能外观和交互性,不会受到此决定的影响;无论选择何种方法,内容的外观和行为方式都相同。我认为任何不涉及自己解析 KML 的选项都是可行的。
    • @Matthew 是的,我已经让它工作了。我什至专门为它编写了一个小型服务器(尽管任何服务器都可以)......服务器是这个控制库的一部分 - code.google.com/p/winforms-geplugin-control-library
    • @Matthew 另外,该摘录专门关于 Google 地图以及它如何呈现大型 kml 文档。它与 Google 地球插件或 JavaScript 中阻止本地文件访问的沙箱完全无关。如果您通过 http 提供这些文件,则通过 fetchKml 加载本地 kml/kmz 文件效果很好。我一直都这样做...此外,如果可以将 kml 作为字符串访问,那么无论该字符串是如何获得的,那么只需在其上调用 GEPlugin.parseKml(kmlString) 即可获得插件-in 将字符串转换为相关的 KmlObjects。
    • 感谢您的信息!我在 GE 插件上花费的时间较少,但我认为我已经确认这是同一个问题。我想我现在也需要纠正另一个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多