【问题标题】:What Does Local file mean for KML?本地文件对 KML 意味着什么?
【发布时间】:2012-10-10 06:29:51
【问题描述】:

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

我的代码

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

例子

网络链接

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

指定的文件可以是本地文件,也可以是远程文件 服务器。在最简单的形式中,网络链接是一种有用的方式 在 同一台电脑。

到目前为止,我们所有的示例都要求 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>

【问题讨论】:

  • 您完全误解了local file specification 的含义,这并不意味着您机器上的本地文件 - 它意味着域上的相对路径。请参阅我的答案以获得更全面的解释。

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


【解决方案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 中的网络链接也可以使用本地文件规范或绝对 URL 来引用图像文件。

本地 &lt;href&gt;../images/pic.jpg&lt;/href&gt;

绝对&lt;href&gt;http://www.somesite.com/images/pic.jpg&lt;/href&gt;

【讨论】:

  • 我试过了,但是当我在我的 Ubuntu 上加载本地图像时,我得到了一个很大的 X 叉 - 我的代码是这样的 - wm5midshr.GIF
  • @gansub 我不确定您的意思,Google 地球插件已被弃用多年......另外 - 如果您有问题/问题,您应该提出自己的问题。几乎没有足够的信息可以帮助您。
【解决方案2】:

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

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

【讨论】:

  • 很抱歉,但它们似乎混杂在 Google 论坛上。好像有一条消息说 Google 地球也用我使用的标签移到了这里..
  • 如果您询问 Google 地球,请尝试使用 google-earth 标签
  • 我在你发帖之前改了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 2011-12-28
  • 2020-10-12
  • 2011-06-11
  • 2010-10-02
  • 2013-01-16
相关资源
最近更新 更多