0

Google のツール、特に Google Earth API を使用して、論文用の地理視覚化アプリケーションを構築しています。いくつかの地域を目印と組み合わせて、さまざまなレベルの詳細を作成できるようにしようとしています。これにより、カメラが十分に離れているときにいくつかの目印 (地域を表す大きなポリゴン) が表示され、カメラが十分に離れているときに他の小さなポリゴン (小さな領域を表す) が表示されます。カメラがズームインします (大きなものは消えます)。

これを達成するには、目印を領域で囲み、最小ピクセル値と最大ピクセル値を設定する必要があることを理論的に知っていますが、領域自体を作成しようとすると問題が始まります。

具体的には、リージョンの作成には成功しますが、フォルダに追加しようとするとエラーが発生します。エラー メッセージは、コードの残りの部分を含む init コールバック関数から来ているため、あまり役に立ちません。

「キャッチされないエラー: NPObject のメソッド呼び出しエラー。」

問題のあるコードの部分は次のとおりです。

                    //Try to create region
                    //experimental
                    var folder = ge.createFolder('');
                    var region = ge.createRegion('');
                    var box = ge.createLatLonAltBox('');
                    box.setAltBox(<?= $latitude + 0.035 ?>, <?= $latitude - 0.035 ?>, <?= $longitude + 0.035 ?>, <?= $longitude - 0035 ?>, 0.0, 0.0, 0.0, ge.ALTITUDE_CLAMP_TO_GROUND);
                    region.setLatLonAltBox(box);
                    var lod = ge.createLod('');
                    lod.setMinLodPixels(20.0);
                    region.setLod(lod);

                    //---------------------

                    // Create the placemark.
                    //and add it to the map
                    var placemark = makeSimplePlacemark(<?= $latitude ?>, <?= $longitude ?>,  '<?= $location ?>');
                    folder.getFeatures().appendChild(region);
                    folder.getFeatures().appendChild(placemark); 
                    ge.getFeatures().appendChild(folder);

「folder.getFeatures().appendChild(region);」という行を削除すると、それは正常に動作しますが、地域、または別の解決策が必要です。そして、問題は私が見逃している単純なものであるとほぼ確信しています... :(

どんな助けでも大歓迎です。よろしくお願いいたします。

4

3 に答える 3

0

KML を Google Earth プラグインに組み込むことについて、別の考えがありました。どのメソッドがどのオブジェクトを KML 階層のどのポイントに追加するのかを把握しようとして、同様の問題に遭遇しました。私のアプリケーションでは、必要な KML を文字列として記述したコードを使用し、次のように parseKML メソッドを使用することで、API の KML 構造部分の使用を回避することができました。

var myKML = '';
//build kml text and assign it to myKML
built_track = ge.parseKml(myKML);
ge.getFeatures().appendChild(built_track);
于 2012-06-27T12:01:45.430 に答える
0

やっぱり答えは見つかりました。おやすみなさいの睡眠はいつも私が推測するのに役立ちます.

append を使用してリージョンを子ノードとしてフォルダー項目に追加しようとしたのは間違っていたようです。kml形式では、リージョンノードと目印ノードの両方が同じレベルのフォルダーノードにネストされているため、これを行う必要があると考えていました。

しかし、プラグイン API を通じて、この目的専用の setRegion(kmlRegion) メンバーがあるようです。良いことに、このメンバーは kmlPlacemarks にも存在するため、フォルダーを作成する必要さえありません (少なくともこの理由で)。

正しいコードは次のとおりです。

                    //Try to create region          
                    //experimental
                    var region = ge.createRegion('');
                    var box = ge.createLatLonAltBox('');
                    box.setAltBox(<?= $latitude + 0.035 ?>, <?= $latitude - 0.035 ?>, <?= $longitude + 0.035 ?>, <?= $longitude - 0.035 ?>, 0.0, 0.0, 0.0, ge.ALTITUDE_CLAMP_TO_GROUND);
                    region.setLatLonAltBox(box);
                    var lod = ge.createLod('');
                    lod.set(128,-1,64,256);
                    region.setLod(lod);

                    //---------------------

                    // Create the placemark.
                    //and add it to the map
                    var placemark = makeSimplePlacemark(<?= $latitude ?>, <?= $longitude ?>,  '<?= $location ?>');
                    placemark.setRegion(region);
                    ge.getFeatures().appendChild(placemark);

そもそもどうしてあのメンバーがいなくて寂しかったの…もっと頻繁に立ち止まって休むべきです:/

于 2012-06-27T07:06:42.640 に答える
0

これが機能するかどうかはわかりませんが、楽しみのために、コード内の 4 つの create* 呼び出しすべてを '' の代わりに任意の名前で作成してみてください。

var folder = ge.createFolder('test1');
var region = ge.createRegion('test2');
var box = ge.createLatLonAltBox('test3');
box.setAltBox(<?= $latitude + 0.035 ?>, <?= $latitude - 0.035 ?>, <?= $longitude + 0.035 ?>, <?= $longitude - 0035 ?>, 0.0, 0.0, 0.0, ge.ALTITUDE_CLAMP_TO_GROUND);
region.setLatLonAltBox(box);
var lod = ge.createLod('test4');

create* メソッドへの引数として '' を渡すときに、前に言及したエラーを受け取りました。

于 2012-06-26T17:26:28.700 に答える