基本的に、ロードする KML ファイルがあり、そこに 2 つの異なるポイント セットがあります。ただし、一度に 1 つのセットを提示できるようにしたいのですが、これを行う最も簡単な方法は、セットを 2 つの異なる KML ファイルに分割し、セットに応じて適切なファイルをロードすることです。これを行うことで、私にとってもうまくいく可能性があります。どうもありがとう。
3 に答える
kaliatech の答えは正しくて便利ですが、少しやり過ぎで、このアプローチよりも実装が難しいです。これは Google の例で、チェックボックスを介してさまざまな KML ファイルの読み込みを切り替えます。
kml のファイル名を red/yellow/green に変更するか、コードをより具体的な名前に変更するだけです - どれだけ快適に感じ、どのような最終結果が必要かによって異なります。
上記のソリューションでは、JavaScript を使用した Google Earth API のアプローチについて説明しています。
純粋な KML ソリューションは、ListStyle を介してラジオ ボタンを KML のフォルダーに追加し、サブフォルダーまたは NetworkLink リンクに各ポイント セットを配置することです。最初に表示したくない他のサブフォルダーに<visibility>0</visibility>要素を追加することで、セットの 1 つをデフォルトで表示することができます。別のトリックは、他のセットを表示するラジオ ボタンを選択するように、名前または説明に指示を含む空の最初の機能を用意することです。これは、Google Earth の Google マップ オーバーレイで使用されています。
コンテナにradioFolderを指定すると、一度に表示できるのはコンテナのアイテムの 1 つだけです。
ポイントの 2 つのセットで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
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」を使用する必要があるかどうかを判断するのは難しい場合があることに注意してください。Googleのドキュメントは特に明確ではありません:
フォルダー (または関連する 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">
...