1

Google 地球的文档说我应该能够访问本地驱动器上的文件,但我找不到示例,当我尝试在本地驱动器上使用 KML 时,它似乎没有加载。我看到很多答案说它无法完成,但是为什么文档中另有说明呢?

我的代码

var href = 'http://code.google.com/'
                     + 'D:/visual studio 12/Projects/myMap/myMap/myPoints.Kml';

例子

网络链接

网络链接包含一个带有(超文本引用)加载文件的元素。可以是本地文件规范或绝对 URL。尽管名称如此,但 a 不一定从网络加载文件。链接中的 指定以下任何内容的位置: •图标样式、地面覆盖和屏幕覆盖中的图标使用的图像文件 •元素中使用的模型文件 •网络链接加载的 KML 或 KMZ 文件

指定的文件可以是本地文件,也可以是远程服务器上的文件。在最简单的形式中,网络链接是一种有用的方法,可以在同一台计算机上将一个大型 KML 文件拆分为更小、更易于管理的文件。

到目前为止,我们的所有示例都要求将 KML 代码从本地计算机传送到 Google 地球。网络链接使您能够从远程位置提供内容,并且通常用于将数据分发给大量用户。这样,如果需要修改数据,只需在源位置进行修改,所有用户都会自动收到更新后的数据。

我做了一些更改和测试,发现错误必须在我的 HTML 文件中,而不是在 KML 文件中。如果我单击 HTML 文件,我会得到与运行程序相同的结果。

我认为您运行 HTML 文件并且它应该调用 KML 是否正确?还是我只是调用 KML 来打开 GE?

这是我要运行的示例 HTML。

<!DOCTYPE html>
<html>
<head>
    <title>Sample</title>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>  
    <script type="text/javascript">
        var ge;
        google.load("earth", "1.x");

        function init() {
            google.earth.createInstance('map3d', initCB, failureCB);
        };

        function initCB(instance) {
            ge = instance;
            ge.getWindow().setVisibility(true);
            var href = 'https://dl.dropbox.com/u/61240296/myPoints.Kml';
            google.earth.fetchKml(ge, href, kmlFinishedLoading);
        };

        function kmlFinishedLoading(obj) {
            kmlObject = obj;
            if (kmlObject) {
                if ('getFeatures' in kmlObject) {
                    kmlObject.getFeatures().appendChild(placemark);
                }
                ge.getFeatures().appendChild(kmlObject);
                if (kmlObject.getAbstractView()) {
                    ge.getView().setAbstractView(kmlObject.getAbstractView());
                }
            }
        };

        function showHideKml() {
            kmlObject.setVisibility(!kmlObject.getVisibility());
        };

        function failureCB(errorCode){};

        google.setOnLoadCallback(init);
   </script>
</head>
<body>
    <div id="map3d" style="height: 320px; width: 679px;">
    </div>
</body>
</html>
4

2 回答 2

1

你误会了 的意思local file specification。如果您阅读文档,它实际上并没有说明“在您的计算机上”的文件。

(sic) 可以是本地文件规范或绝对 URL

这意味着文件规范可以是相对的或绝对的 - 本地意味着相对于托管页面的域的本地,而不是您家庭计算机上的本地!

简单来说,假设我的网站位于(这将是您的示例 HTML)

http://www.somesite.com/

我还有一个 kml 文件,其中包含一个网络链接,位于

http://www.somesite.com/kml/foo.kml

最后一些图像位于

http://www.somesite.com/images/

示例 HTML 中的代码 - 可以使用本地文件规范或绝对 URL来引用文件。

即它可以使用

当地的 google.earth.fetchKml(ge, '/kml/foo.kml', ...

绝对google.earth.fetchKml(ge, 'http://www.somesite.com/kml/foo.kml', ...

此外,网络链接foo.kml也可以使用本地文件规范或绝对 URL来引用图像文件。

IE

当地的 <href>../images/pic.jpg</href>

绝对<href>http://www.somesite.com/images/pic.jpg</href>

于 2013-12-16T16:18:14.063 回答
0

你提到了,Documentation for Google Earth但你已经标记了谷歌地图、谷歌地图 API v3 的问题。Google Earth 是一个在您的本地计算机上运行的应用程序,可以访问您的本地硬盘驱动器,另外两个是基于 Web 的。

如果您使用的是 Google Maps API v3,则处理 KML 的本机对象是KmlLayer,该对象需要公开可用,以便 Google 的服务器可以检索并呈现它以在地图上显示。

于 2012-10-19T16:22:51.437 回答