パスワードで保護され、80 以外のポートを持つフォルダーにある KMZ ファイルを表示しようとしています。次のようになります。
http://localhost:8080/assets/data/3641
これにより、有効な MIME タイプの KMZ ファイルが返されます。ブラウザでこのリンクにアクセスすると、保存して Google Earth で開くことができます。
Google Earth の API には、KMZ/KML を表示するための次のメソッドがあります。
- KmlNetworkLink - KMZ/KML の URL を指定し、このオブジェクトを GE インスタンスにアタッチします。
- parseKml() - KML 文字列を指定すると、添付する KmlFeature が返されます
- fetchKml() - KML/KMZ への URL を指定すると、それが添付されます
- もう 1 つの便利なメソッドは、Google Earth API ユーティリティ ライブラリのdisplayKml() で、fetchKml() を使用します。
fetchKml()
私の最初の試みは fetchKml を使用することでしたが、これは応答がありません。サイレントに失敗します。これがプラグインによって通常の動作と見なされていることに驚きました (例外をスローしない、またはエラーを処理するための 2 番目のコールバックを提供しないのはなぜですか?)。サンプルの kmz を次の形式で提供すると、このメソッドは正常に機能します。
http://localhost/somefile.kmz
問題は、最初の URL がパスワードで保護されていることだと思います。ログイン セッションが存在しない場合、ログイン画面にリダイレクトされます。また、Google Earth プラグインがブラウザと同じブラウザ セッションを共有していないと思われます。 KMZ/KML の代わりに HTML ファイルを受け取るため、ログイン画面が表示されて失敗します。
parseKml()
思い切って、サーバー側で KMZ を解凍し、KML 文字列を返す別の API メソッドを作成しました。
http://localhost:8080/assets/data/unzip/3641
この方法の優れた点は、独自の JavaScript を記述して GET リクエストを実行することです。このリクエストは Google Earth を経由しないため、開いたログイン セッションが使用され、KMZ をダウンロードできます。欠点は、KML ファイルが参照できる画像や音楽を KMZ に含めることができることです。ドキュメントに関する限り、これらを KML 文字列と一緒に渡すことはできません。
KmlNetworkLink
私の最後の試みは、KmlNetworkLinkとKmlLinkを使用することでした。これは fetchKml と同じ効果があります - 何も起こりません。
更新:また、有効な証明書なしで「https」を使用すると失敗します。