本地文件对KML意味着什么?

时间:2012-10-19 15:35:58

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

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

我的代码

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

实施例

  

网络链接

     

网络链接包含带有(超文本引用)的元素,用于加载文件。可以是一个   本地文件规范或绝对URL。尽管名字,一个    不一定从网络加载文件。该    在链接中指定以下任何位置:•An   图标样式,地面叠加层和屏幕中的图标使用的图像文件   叠加•元素中使用的模型文件•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>

2 个答案:

答案 0 :(得分:1)

你误解了local file specification的含义。如果您阅读文档,它没有说明“计算机上”的文件,它实际上就是这样说的。

  

(原文如此)可以是本地文件规范或绝对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中的网络链接也可以使用本地文件规范或绝对网址来引用图像文件。

本地 <href>../images/pic.jpg</href>

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

答案 1 :(得分:0)

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

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