Pythonで重量級C++の痛みなし3Dマップと地形をレンダリングする方法
Pythonで高さ行列から高品質な3D地形モデルをレンダリングする必要があった最後の頃は、いつもの壁にぶつかりました。低速な3DグラフィックスのMatplotlibを使うか、重いGISパッケージを引っ張ってきて、C++ラッパーを扱い、グラフィックコンテキストを手動で設定するか。
forge3dプロジェクトは、このギャップを埋めようとしています。著者はRustエンジンを取り上げ、wgpuライブラリ経由でWebGPUグラフィックAPIにラップし、Python用の готов-made wheelsを構築しました。その結果は、数行のコードでインタラクティブなビューアを開くか、ウィンドウなしでシーンをレンダリングできるツールです。
forge3dの内部動作
このライブラリの主なアイデアは、おなじみのデータサイエンスとGISデータ型を高速なGPUレンダリングと組み合わせることです。シェーダーを書いたり、WebGPUパイプラインを理解したりする必要はありません——内部ではそれが動いていますが。
ライブラリが標準で提供する機能:
- GeoTIFFとNumPy配列から高さ行列を読み込み。
- LAZ、COPC、EPT形式の点群を読み込み。
- ラスターとベクターオーバーレイレイヤーで動作。
- ネットワークからタイルをストリーミングするためのCOGプロトコルをサポート。
- 専用ウィジェット経由でJupyter Notebookに直接埋め込み。
インストールは簡単です:
notebookで直接3Dを実行したり、テストデータセットを取得する予定がある場合は、拡張パッケージセットをすぐにインストールできます:
5行のコードで地形をレンダリング
ビューアでの作業を見てみましょう。以下のコードはレーニア山のテストDEMファイルをダウンロードし、ウィンドウを開き、高解像度フレームを保存します。
構文に注意してください。太陽位置、カメラ角度、Z軸スケーリングは直感的なメソッドで設定されます。同時に、CI/CDやバッチマップ処理スクリプトなどで、グラフィック環境なしでシーンを完全にレンダリングできます。
なぜWebGPUとRustなのか
技術選択は建築的に正当化されています。Rustは、LAZや重いGeoTIFFファイルなどのバイナリフォーマットを処理する際に高速性と安全性を提供します。WebGPUは、Vulkan、Metal、DirectX 12で同様に動作する最新のクロスプラットフォームAPIとして機能します。
単一のWheelパッケージでコンパイル済みバイナリを取得できます。C++ライブラリのマニュアルビルドや、競合するOpenGLシステムドライバーの心配は不要です。
何がオープンで、何に払う必要があるか
開発者は明確なモデルを設定しています。コア機能はApache 2.0およびMITライセンスでリリースされています。サーフェスの構築、点群の読み込み、ベクターのオーバーレイ、アニメーションのアセンブリが可能です。
カートのモジュールやSVG/PDFへのエクスポート、スケールバー、GeoJSONまたはCityJSONからの3D建物の読み込みには、商用キーを要求しています。 activateメソッドで有効化されます。
このツールの対象者
ジオデータ分析、地形可視化、Pythonでのマップ作成に関わる仕事をしているなら、このプロジェクトは確かにブックマークする価値があります。ライブラリはGitHubで約560個のスターを持っていますが、コードはクリーンで、ドキュメントには動作する例が豊富にあります。
シンプルな2Dマップには、 FoliumまたはGeoPandasを使用してください。しかし、高速な3D地形や点群処理が必要な人で、低レベルのグラフィックに踏み込みたくない場合は、forge3dが余分な手間なく仕事を引き受けてくれます。
関連プロジェクト