Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用fetchkml函数将本地KMZ文件加载到带有google earth插件的浏览器中_Javascript_Kml_Google Earth_Google Earth Plugin_Kmz - Fatal编程技术网

Javascript 无法使用fetchkml函数将本地KMZ文件加载到带有google earth插件的浏览器中

Javascript 无法使用fetchkml函数将本地KMZ文件加载到带有google earth插件的浏览器中,javascript,kml,google-earth,google-earth-plugin,kmz,Javascript,Kml,Google Earth,Google Earth Plugin,Kmz,我们有一个KMZ文件,可以很好地加载到Google Earth桌面应用程序中。没有错误 当我们尝试使用Google Earth插件做同样的事情时,它甚至不会从fetchKml函数返回。在本地文件上使用fetchKml需要了解哪些特殊设置 我正在尝试加载文件,如下所示: // Where 'ge' is the Google Earth Plugin var href = 'C:/KMLDATA/TEST.KMZ'; google.earth.fetchKml(ge, href, function

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

当我们尝试使用Google Earth插件做同样的事情时,它甚至不会从
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 */ });

这与GoogleEarth插件本身无关,而是与JavaScript沙盒有关

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

var href = 'C:/KMLDATA/TEST.KMZ';
google.earth.fetchKml(ge, href, function(kmlObject) { ... }
要在浏览器中使用本地文件,您有许多选项

  • 设置一个本地文件服务器,并通过http服务器发送文件。这是 在任何操作系统中都相对容易做到。因此,
    C:/KMLDATA/TEST.KMZ
    可能 变成
    http://localhost/KMLDATA/TEST.KMZ

  • 使用一些可以访问文件系统的“插件”对象。一点 在所有浏览器中都更难操作。一些东西 如ActiveX、XPCOM、签名Java小程序等,通过ActiveX将其插入插件- 显然,它只适用于IE

  • 在HTML5中使用文件api。很多代码,而不是我用kml实际尝试过的东西。非常全面,涵盖了大部分方面

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


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

    您是否已经做到了这一点?我的理解是,除非谷歌也能访问URL,否则在某些情况下这是行不通的。如果我错了,你也让我开心了,因为选项1非常简单,不必直接向公众公开某些内容。从这里开始::当包含大量功能(地名、多边形、线条)的KML内容加载到谷歌地图中时,服务器端决定是在服务器上还是在用户的web浏览器中呈现文档的功能。用户体验,包括功能外观和交互性,将不受此决定的影响;无论选择何种方法,内容的外观和行为都将相同。我认为任何不涉及自己解析KML的选项都是不可行的。@Matthew是的,我已经让它工作了。我甚至专门为它编写了一个小型服务器(尽管任何服务器都可以)…服务器是这个控制库的一部分-@Matthew,这篇摘录是专门关于Google Maps以及它如何呈现大型KML文档的。它与Google Earth插件或JavaScript中阻止本地文件访问的沙盒完全无关。如果您通过http为本地kml/kmz文件提供服务,那么通过fetchKml加载这些文件将非常有效。我一直都在这样做……而且,如果一个人可以以字符串的形式访问kml,无论该字符串是如何获得的,那么就只需要在其上调用GEPlugin.parseKml(kmlString),让插件将该字符串转换为相关的KmlObjects。感谢您提供的信息!我花在GE插件上的时间更少了,但我想我已经确认了这是同一个问题。我想我现在也需要去更正另一个答案。