osgEarth 是基於 OpenSceneGraph (OSG) 的地理空間可視化引擎,支援加載各類地圖數據(影像、高程、矢量)並渲染 3D 地球。本文記錄 OSG 3.1.4 + osgEarth 2.3 在 Windows VC10 下的完整編譯配置、最小可運行項目構建、.earth 文件解析與常見問題排查,適合初學者快速上手。
pan.baidu.com/s/1eSE1sd0#path=/VS相關(含 OSG 3.1.4、osgEarth 2.3、VC10 編譯庫)bin、include、lib、data 等標準 SDK 目錄。新建三個系統環境變量:
| 變量名 | 值(示例) |
|---|---|
OSG_ROOT | D:\OSG\OpenSceneGraph-3.1.4 |
OSGEARTH_ROOT | D:\OSG\osgEarth-2.3 |
GDAL_DATA | %OSG_ROOT%\data\gdal |
將 %OSG_ROOT%\bin 添加到系統 Path 變量,確保運行時能找到 DLL。
cd %OSGEARTH_ROOT%\bin
osgearth_viewer mymap.earth
若彈出紋理地球窗口,說明環境配置成功。
項目名稱:osgEarth_HelloWorld
$(OSG_ROOT)\include$(OSGEARTH_ROOT)\include$(OSG_ROOT)\lib$(OSGEARTH_ROOT)\libOpenThreadsd.lib osgd.lib osgDBd.lib osgFXd.lib osgGAd.lib osgManipulatord.lib osgParticled.lib osgShadowd.lib osgSimd.lib osgTerraind.lib osgTextd.lib osgUtild.lib osgViewerd.libd 後綴。LNK1123 錯誤。main.cpp)#include
#include
#include
#include
int main() {
// 1. 創建 Viewer
osg::ref_ptr viewer = new osgViewer::Viewer();
// 2. 構建場景圖根節點
osg::ref_ptr root = new osg::Group();
// 3. 加載 .earth 文件(包含圖層配置)
osg::ref_ptr node = osgDB::readNodeFile("mymap.earth");
if (!node) {
std::cerr << "Failed to load mymap.earth" << std::endl;
return -1;
}
root->addChild(node.get());
// 4. 場景優化
osgUtil::Optimizer optimizer;
optimizer.optimize(root.get());
// 5. 設置場景並運行
viewer->setSceneData(root.get());
viewer->realize();
return viewer->run();
}
mymap.earth 配置文件放在項目目錄(與 main.cpp 同級):
%OSG_ROOT%\data 複製 world.tif 到項目目錄(與 mymap.earth 同級)。$(OutDir)(如 Debug/)或設置「調試 → 工作目錄」為項目目錄。按 F5 運行,應彈出可交互的 3D 地球窗口:
.earth 文件採用 XML 格式,定義地圖圖層、數據源、投影坐標系等。osgEarth 安裝目錄 tests/ 下提供豐富示例,替換 mymap.earth 內容即可快速體驗不同效果:
建議逐個測試 tests/ 下的 .earth 文件,觀察渲染差異,理解圖層結構。
| 現象 | 原因 | 解決方案 |
|---|---|---|
| LNK1123 錯誤 | 清單工具衝突 | 鏈接器 → 清單工具 → 嵌入清單 = 否 |
| 窗口空白,無地球 | 未找到 .earth 或數據文件 | 確認工作目錄包含 mymap.earth 和 world.tif;檢查 readNodeFile 返回非空 |
| 報 GDAL 驅動錯誤 | GDAL_DATA 環境變量未設置 | 設置 GDAL_DATA 指向 OSG data/gdal 目錄 |
| DLL 缺失報錯 | Path 未包含 OSG bin 目錄 | 將 %OSG_ROOT%\bin 加入系統 Path |
| 編譯報錯找不到頭文件 | 包含目錄配置錯誤 | 檢查 VC++ 目錄 → 包含目錄 是否包含 OSG/osgEarth include |
osgEarth::Map、ImageLayer、ElevationLayer、FeatureLayer 核心類 API。osgEarth::GeoPoint、GeoExtent 地理坐標操作。完整 VC10 項目:pan.baidu.com/s/1eSE1sd0#path=/VS相關