問題タブ [cesium]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cesium - セシウムの相対高
編集:配列が必要なときに単一の座標を渡すことに気付きました。チェックして更新します。
モデルを地面 (水) に配置する必要があります。
私が理解したように、( relativeToGround
KML のような) 相対的な高さはまだ実装されていません。したがって、今のところ最善の解決策は、地形プロバイダーに場所の地形の高さを尋ね、それに応じてモデルの高さを調整することです [ 1 ] (そして、詳細レベルの変更を何らかの方法で処理するよりも)。
Sandcastleの簡単な例を次に示します。場所の高さを取得しようとしています。その場所の地形の高さに変更することで解決さCesium.sampleTerrain
れる which を返すことを期待しています。しかし、それはただちに (同期的に?) 変更されていない入力 ( ) で解決されます。promise
Cartographic
height
height == 100
- コードの何が問題になっていますか?
- 代替アプローチはありますか?
ありがとうございました。
streaming - セシウムの CZML パケットのライブ ストリーミングと処理
こんにちは、ライブ czml パケットをストリーミングし、UI をフリーズさせず、最初からシナリオを開始せずに、サーバーからオブジェクトの新しい czml パケットを新しい更新されたデカルト座標と共にエポック時間とエポックからの経過秒数とともに送信するたびに、Java スクリプトで処理する方法time 、パケットを処理した後、シナリオ全体が最初から再開されます。シナリオの再起動を回避する方法。基本的に、リアルタイムのデカルト座標がサーバーから供給される、リアルタイムで移動するシナリオのオブジェクトが必要です。
javascript - 衛星トラックを WebGLEarth マップに追加します (Leafletjs または Ceiumjs などを使用)
WebGLEarth ( http://www.webgearth.org/api ) でクリック可能なマーカー (ポップアップ付き) を多数使用してマップを作成しました。地球上に 3 つの衛星トラックを配置したいと考えています。それがどこかにホバリングしている衛星であることをはっきりと確認することが重要です (場所は重要ではなく、移動する必要もありません)。したがって、https://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=CZML.html&label=Showcasesのようなもの
ただし、WebGLEarth にはこれを行うためのツールが含まれていません。ポリゴンの追加は機能せず (バグだと思います)、線はまだ含まれていません。また、標準マーカーは 1 つしかないため (私の知る限り)、マーカーを別のアイコンに変更しても機能しません。webgearth を適切な leafletjs プラグインにしてほしいというリクエストがありますが、もちろん、今は自分のマップを作りたいと思っています。
誰かがこれを行う方法についてアイデアを持っていますか? WebGLEarth を Cesiumjs または Leafletjs と組み合わせる方法についてのヒントかもしれません。前もって感謝します!
cesium - 地上高度を取得する
CesiumJSで特定の位置の地上高度を取得する方法はありますか? Scene.globe.getHeight func を試しましたが、undefined が返されます。
ありがとうございました。
javascript - x、y、zをセシウムの経度、緯度、高度に変換する方法は?
three.js ライブラリを使用して、デザイン (植物) を組み立てました。その設計には、原点 (0,0,0) から (x, y, z) の位置の参照を持つ非常に多くの小さなモデルが含まれています。次のリンクにサンプルのスクリーンショットを添付しました
次に、個々のモデルを独自の位置で Cesium に読み込みます。位置 (x、y、z) を (北、東、上) に直接変換してロードしようとすると、期待どおりの結果が得られません。すべてのモデルが散らばっています。
私が達成しようとしている機能は、いくつかの原点 (経度、緯度、高度) ポイントに基づいて、セシウム座標 (経度、緯度、高度) に対して (x、y、z) を参照してモデルをセシウムに配置する必要があります。 )
例えば
原点の地理座標 (ori_lon, ori_lat, ori_alt) => (-106.690647, 36.806761, 0)
モデル座標 (m_x, m_y, m_z) => (-150.9, 126.26, 217.7)
セシウムの予想座標: (ori_lon + m_x, ori_lat + m_y, ori_alt + m_z)
またはこれを達成するためのアルゴリズム。
次の記事で (x, y, z) を (long, lat, alt) に変換しようとしましたが、原点 (long, lat, alt) がありましたが、うまくいきませんでした: (
問題を解決するためのアドバイス/ヘルプ。
javascript - セシウムでプログレッシブ レンダリング レイヤーを実装する
サーバーから送信されたラスター データを表示するレイヤーを実装しようとしています。サーバー プロトコルによって送信されるデータは、広く使用されているブラウザーに組み込まれていません (これは jpeg2000 データです)。したがって、私は自分でデータをデコードし、セシウムに表示させます。
少し複雑な理由:
サーバーはステートフルであるため、クライアントとサーバーの両方がチャネルを維持する必要があります。チャネルは、単一の関心領域に関連付けられています。地域は時間の経過とともに変化する可能性がありますが、すべての時点で、サーバーがチャネルでデータを送信する地域は 1 つだけです。セッションでいくつかのチャネルを使用できますが、チャネルが非常に少ないとサーバーのパフォーマンスが低下します。
関心領域の解像度は均一です (したがって、3D では問題があります)。
サーバーは、データのプログレッシブ送信をサポートしており、使用可能なネットワーク リソースが非常に少ないため、使用したいプロパティ (jpeg2000 の「品質レイヤー」) を徐々に向上させます。
デコードは、CPU 時間の点で重いです。
最初の段階として、レンダリング エンジンによって要求された各タイルのチャネルを作成するだけの ImageryProvider を実装しました。それは機能しましたが、接続が多すぎて、プログレッシブ レンダリングを楽しめませんでした。さらに、パフォーマンスが低かったため、セシウム ビューアのビュー エリア内のタイルを最初にデコードする優先メカニズムを実装することで、問題はほぼ解決されました。
次に、表示領域に応じてチャネルの関心領域を変更する自己レンダリング ラスター「レイヤー」を実装しました。その後、複数チャンネルの問題は解決され、プログレッシブ レンダリングを楽しむことができました。ただし、次の問題が発生しました。
a. デコードされたピクセルを表示するために使用した方法は、デコードされたピクセルを含む単一のキャンバスを表示する画像プロバイダーを実装することでした。画像が更新される (再配置またはプログレッシブ デコード) たびに、古い画像プロバイダーを削除して新しいものに置き換える必要がありました。これは正しい方法ではないと思います。また、古いプロバイダーを新しいプロバイダーに置き換えると、z オーダーが間違っているなどの悪い動作が発生する可能性があります。これらの問題のいくつかは、イメージ マテリアルでプリミティブを使用することで解決される可能性があります。ただし、画像のデータ URL 形式を使用する必要があります。これを行うと、キャンバスからデータ URL への多くの変換が発生するため、パフォーマンスが低下します。
b. ビュー領域をサーバーに送信するために、ビュー領域を理解するための特別なコードを作成する必要がありました (pickEllipsoid および同様の機能を使用)。このコードは、Cesium エンジン内で行われる何かの複製だと思います。さらに、pickEllipsoid が 2D でサポートされていないことをいくつかのディスカッションで見ました。一般的に、自分でそのコードを実装するのではなく、ビュー領域を計算する関数があることを非常に嬉しく思います。
c. 私がそれを実装した方法は、API の問題を引き起こします: 画像プロバイダー (addImageryProvider() メソッドと removeLayer() ) を追加および削除するための Cesium の優れた API とは対照的に、私の実装では、ユーザーは私が彼に公開するメソッドのみを使用する必要があります。 (たとえば、Viewer を引数として受け入れる add() メソッド)。
d. 3D モードでは、解像度が均一でない場合、画像は近接領域で鮮明ではありません。サーバーの動作方法に固有の問題であることはわかっています。指摘してください。
ここで本当に欠けているのは、ImageryProvider のインターフェースよりも強力なプラグインを実装する方法だと思います: レンダリング エンジンからビュー エリアの変更イベントを受け取り、いつ、どのように決定できるかを決定できる自己レンダリング ラスター レイヤーを実装するタイルを更新します。別の代替手段 (これは私にとってはさらに優れていますが、他の人にとっては再利用性が低いと思います) は、ビュー領域内のタイルのリストを ImageryProvider 実装に公開することです。
このシナリオに対処する正しい方法は何ですか?
web - セシウムのテクスチャで 3D 建物を表示する方法は?
私は都市部の 3D Web-GIS に取り組んでいます。3D 建物 (テクスチャ付き) は Arcgis で作成されました。この 3D モデルを Web 上に表示するための最適なソリューションを探しています。Cesium を試しましたが、KML ファイルを CZML に変換できませんでした。KML を CZML に変換するにはどうすればよいですか? Web 上に 3D ビルドインを表示する他のソリューションはありますか
javascript - Cesium - CZML で作成されたビルボードに scaleByDistance を使用する
アイコンをビルボードとして表示し、距離で拡大縮小しようとしています。私はうまく管理できますが、JSで直接ではなくCZMLを介してビルボードをロードするとすぐに、ビルボードのサイズを変更できません。
私のJSファイルには次のものがあります:
私のCZMLファイルは次を示しています:
これを使用する前に:
明らかに、これは現在機能していません。しかし、ビルボードの ID を取得して scaleByDistance を使用する方法が見つかりません。
cesium - セシウム: CZML のストリーミング例
この質問は以前に尋ねられたようですが、適切な例を見つけることができませんでした。PHP には精通していますが、Javascript は初めてで、CZML をストリーミングする方法がわかりません。
マップ上に約 6,500 のアセットを表示したいと考えています。すべてがロードされた後に Web ページが表示されないようにする (およびユーザーの忍耐力をテストする) ために、バックグラウンドでアセットを表示してロードする必要があります。
誰かがこれを行う方法の例を教えてもらえますか? 次のように czml ファイルを読み込むことができます。
しかし、それは私が得た限りです:-(私は.processUrlをどこかに置く必要があることを知っており、CZMLファイルで異なるパケットを使用する必要があることを理解したので、私のCZMLファイルは次のようになります:
誰かが実際のサンプル、つまり .czml ファイルと .js ファイルを提供できれば素晴らしいことです。ありがとうございました!
javascript - デフォルトの表示位置を設定する方法 (Cesium 1.6)
セシウム アプリのデフォルトのビュー/ホームの場所を設定したい。
一度その場所に飛んでみたいだけではありません。場所をデフォルト/ホームとして設定して、ホームボタンウィジェットなど、アプリの他の場所で使用できるようにします。
私はCamera.DEFAULT_VIEW_RECTANGLE
(ドキュメントはこちら)を次のように設定しようとしました:
しかし、それは動作しません..
完全を期すために、アプリを初期化する方法は次のとおりです。
助言がありますか?さらに情報が必要な場合は、お知らせください。