如何在Google地球中的KML文件之间切换或在各组点之间切换

时间:2012-10-01 17:02:38

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

所以基本上我有一个我加载的KML文件,我有2个不同的点集,我在那里。但是,我希望能够一次呈现一组,我认为最简单的方法是将该组拆分为2个不同的KML文件,然后根据设置加载相应的文件,或者是否有其他方式这样做,它也可以为我工作。 非常感谢。

3 个答案:

答案 0 :(得分:1)

虽然kaliatech的回答是正确和有用的,但与this approach相比,实施起来也有点过分和难以实现。这是一个Google示例,可以通过复选框切换各种KML文件的加载。

您需要做的就是将kmls的文件名更改为红色/黄色/绿色或将代码更改为更符合您使用的名称 - 具体取决于您的感受以及您想要的最终结果。

答案 1 :(得分:0)

如果您熟悉JavaScript并且可以使用Google Earth API,有很多方法可以执行此操作。

如果文件夹具有已知ID,则这是隐藏/显示KML文件中的文件夹的示例:

var showFolder = true;
google.earth.fetchKml(gePlugin, kmlUrl, function(rootKmlFeature) {
      if (rootKmlFeature) {

        var myFolderEl = rootKmlFeature.getElementById('#myFolderId');
        if (showFolder) {
            myFolderEl.setVisibility(true);
        }
        else {
            myFolderEl.setVisibility(false);
        }
      }
});

根KmlFeature始终是KmlContainer,它提供查找子元素的方法。请注意,您可能很难知道是否需要使用“getElementById”或“getElementByUrl”。谷歌文档不是特别清楚:

一旦您对文件夹(或相关的KmlFeature)有了引用,您就可以动态设置可见性(以及许多其他属性)以响应UI事件或其他任何内容。


修改(在您发表评论后)

fetchKml回调(在HTML中)为您提供加载的kmlObject。根据您想要触发显示/隐藏交互的方式,您可能希望将kmlObject存储在更高(可能是全局)范围内。然后,当用户按下按钮或其他任何内容时,您可以执行以下操作:

function displayPlacemark1(visible) {

  var baseUrl = 'https://sites.google.com/' + 'site/shahinkmlexamples/experiment/bombs12.kml';

  var placemark = kmlObject.getElementByUrl('#placemark1');
  placemark.setVisibility(visible);
}

相应地,在您的KML文件中,您要为地标添加id属性。即。

...
<Placemark id="placemark1">
...

答案 2 :(得分:0)

上述解决方案使用JavaScript描述了Google Earth API方法。

纯KML解决方案是通过ListStyle将单选按钮添加到KML中的文件夹,然后在子文件夹或NetworkLink链接中放置每组点。默认情况下,您可以通过在最初未显示的其他子文件夹中添加&lt; visibility&gt; 0&lt; / visibility&gt; 元素,使其中一个集可见。另一个技巧是使用名称或描述中包含指令的空第一个功能来选择单选按钮以查看其他集。您可以在Google Maps Overlay in Google Earth中找到它。

radioFolder 为Container指定时,一次只能看到一个Container的项目。

以下是使用带有两组Points的 radioFolder 的KML示例:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>

    <Style id="rf">
      <ListStyle>
        <listItemType>radioFolder</listItemType>
      </ListStyle>
    </Style>

    <Folder>
      <name>Radio A visible by default</name>
      <description>Select which folder to see</description>
      <styleUrl>#rf</styleUrl>
      <Folder>
      <name>Folder A</name>
      <Placemark>
        <name>Radio A</name>
        <Point>
          <coordinates>-121.9921875, 37.44140625</coordinates>
        </Point>
      </Placemark>
      </Folder>

      <Folder>
      <name>Folder B</name>
      <visibility>0</visibility>
      <Placemark>
        <name>Radio B</name>
        <visibility>0</visibility>
        <Point>
          <coordinates>-121.9921875, 37.265625</coordinates>
        </Point>
      </Placemark>
      </Folder>

    </Folder>    
  </Document>
</kml>

参考: https://developers.google.com/kml/documentation/kmlreference#listItemType