OsgEarth3.2支持打开S57海图的驱动DLL
时间: 2023-11-28 17:04:41 浏览: 264
是的,OSGEarth 3.2 中支持通过 S-57 驱动库(DLL)打开 S-57 海图。使用驱动库的好处是可以支持不同的 S-57 版本和数据格式,同时也可以提高数据读取的速度和效率。
下面是一个简单的示例代码,演示了如何使用 S-57 驱动库打开 S-57 海图:
```cpp
#include <osgEarth/MapNode>
#include <osgEarth/Registry>
#include <osgEarthUtil/OGRFeatureSource>
#include <osgViewer/Viewer>
using namespace osgEarth;
using namespace osgEarth::Util;
int main(int argc, char** argv)
{
// 初始化OSGEarth引擎
osg::ref_ptr<osg::Group> root = new osg::Group;
osgViewer::Viewer viewer;
viewer.setSceneData(root.get());
// 加载S-57驱动库
osgEarth::Registry::instance()->loadS57Plugin();
// 创建地球模型
osgEarth::MapOptions mapOptions;
mapOptions.setTerrainPolicy(new osgEarth::Util::NoopTerrainPolicy);
osg::ref_ptr<osgEarth::Map> map = new osgEarth::Map(mapOptions);
osg::ref_ptr<osgEarth::MapNode> mapNode = new osgEarth::MapNode(map.get());
root->addChild(mapNode.get());
// 创建OGRFeatureSource并将其添加到地图中
osgEarth::Util::OGRFeatureOptions featureOptions;
featureOptions.url() = "path/to/s57_file.000";
featureOptions.driver() = "S57";
featureOptions.name() = "S57 Features";
featureOptions.srsString() = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs";
osg::ref_ptr<osgEarth::Features::FeatureSource> featureSource =
new osgEarth::Features::OGRFeatureSource(featureOptions);
map->addLayer(new osgEarth::Features::FeatureModelLayer(featureSource.get()));
// 运行OSG视图器
return viewer.run();
}
```
在上述代码中,我们首先创建了一个`osg::Group`作为根节点,并创建了一个`osgViewer::Viewer`视图器。然后,我们通过调用`osgEarth::Registry::instance()->loadS57Plugin()`加载了 S-57 驱动库。接着,我们创建了一个`osgEarth::Map`对象和一个`osgEarth::MapNode`节点,用于存储地球模型和地图数据。然后,我们使用`osgEarth::Util::OGRFeatureSource`类创建了一个`osgEarth::Features::FeatureSource`对象,用于读取 S-57 海图数据,并将其添加到地图中。最后,我们运行了 OSG 视图器。
阅读全文