1

Google Earth のドキュメントには、ローカル ドライブのファイルにアクセスできるはずですが、例が見つからず、ローカル ドライブで KML を使用しようとすると、読み込まれていないようです。それはできないという回答がたくさんありますが、なぜドキュメンテーションはそうではないと言っているのでしょうか?

マイコード

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

ネットワーク リンク

ネットワーク リンクには、ファイルをロードする (ハイパーテキスト参照) を持つ要素が含まれています。は、ローカル ファイル指定または絶対 URL にすることができます。名前にかかわらず、a は必ずしもネットワークからファイルをロードするとは限りません。リンク内の は、次のいずれかの場所を指定します。 •アイコン スタイル、グラウンド オーバーレイ、およびスクリーン オーバーレイのアイコンで使用される画像ファイル •要素で使用されるモデル ファイル •ネットワーク リンクによってロードされる KML または KMZ ファイル

指定するファイルは、ローカル ファイルまたはリモート サーバー上のファイルのいずれかです。最も単純な形式では、ネットワーク リンクは、1 つの大きな KML ファイルを同じコンピューター上でより小さく管理しやすいファイルに分割するのに便利な方法です。

これまでの例では、KML コードをローカル マシンから Google Earth に配信する必要がありました。ネットワーク リンクは、遠隔地からコンテンツを提供する機能を提供し、一般的に多数のユーザーにデータを配布するために使用されます。このように、データを修正する必要がある場合は、ソースの場所でのみ変更する必要があり、すべてのユーザーは更新されたデータを自動的に受け取ります。

いくつかの変更とテストを行った結果、エラーは KML ファイルではなく HTML ファイルにある必要があることがわかりました。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>
4

2 に答える 2

1

の意味を誤解していlocal file specificationます。ドキュメントを読んでも、「コンピュータ上の」ファイルについては何も書かれていません。

(sic) は、ローカル ファイル指定または絶対 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を使用してイメージ ファイルを参照することもできます。

すなわち

ローカル <href>../images/pic.jpg</href>

絶対:<href>http://www.somesite.com/images/pic.jpg</href>

于 2013-12-16T16:18:14.063 に答える
0

あなたは言及しましたDocumentation for Google Earthが、質問にタグを付けました Google Maps、Google Maps API v3. Google Earth は、ローカル マシン上で実行され、ローカル ハード ドライブにアクセスできるアプリケーションです。他の 2 つは Web ベースです。

Google Maps API v3 を使用している場合、KML を処理するネイティブ オブジェクトはKmlLayer です。このオブジェクトは、Google のサーバーが取得してマップ上に表示するためにレンダリングできるように、公開されている必要があります。

于 2012-10-19T16:22:51.437 に答える