所以基本上我有一个我加载的 KML 文件,并且我在那里展示了 2 组不同的点。但是,我希望能够一次呈现一个集合,我认为最简单的方法是将集合拆分为 2 个不同的 KML 文件,然后根据集合加载适当的文件,或者如果有其他方式这样做,它也可以为我工作。非常感谢。
3 回答
虽然 kaliatech 的答案是正确且有用的,但它也比这种方法有点矫枉过正且难以实施。这是一个 Google 示例,通过复选框切换各种 KML 文件的加载。
您需要做的就是将 kmls 的文件名更改为红色/黄色/绿色,或者将代码更改为更适合您使用的名称 - 取决于您感觉的舒适程度以及您想要的最终结果。
如果您熟悉 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 属性。IE
...
<Placemark id="placemark1">
...
上述解决方案描述了使用 JavaScript 的 Google Earth API 方法。
纯 KML 解决方案是通过 ListStyle 将单选按钮添加到 KML 中的文件夹,然后将每组点放在子文件夹或 NetworkLink 链接中。您可以通过在最初不希望显示的其他子文件夹上添加<visibility>0</visibility>元素来使其中一组默认可见。另一个技巧是在名称或描述中使用说明来选择单选按钮以查看其他集合的第一个功能是空的。您可以在 Google Earth 的 Google Maps Overlay 中找到它。
为 Container 指定radioFolder时,一次只能看到 Container 的一项。
下面是使用带有两组点的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