osgearth3.2使用OGR将S57海图转化为shp并加载显示的代码
时间: 2023-12-07 12:04:02 浏览: 349
S57标准的电子海图(120张图测试用),已经转换为.shp格式
以下是使用 OGR 将 S57 海图转化为 shp 并加载显示的示例代码:
```cpp
#include <osgEarth/MapNode>
#include <osgEarth/Registry>
#include <osgEarthUtil/OGRFeatureSource>
#include <osgViewer/Viewer>
int main(int argc, char** argv)
{
// 初始化 osgEarth 应用程序
osg::ArgumentParser arguments(&argc, argv);
osg::ref_ptr<osgEarth::MapNode> mapNode = osgEarth::Util::MapNodeHelper().load(arguments, &osg::notify);
// 加载 S57 海图文件
std::string s57_file = "path/to/s57/file";
osg::ref_ptr<osgEarth::Features::FeatureSource> featureSource =
new osgEarth::Drivers::OGRFeatureOptions(s57_file, "ENC", "S57").create(mapNode->getMap());
// 将 S57 数据转换为 shp 格式
std::string shp_file = "path/to/shp/file";
osgEarth::Features::Filter filter;
filter.expression() = "FACC > 0"; // 过滤条件,只保留 FACC 大于 0 的要素
featureSource->writeFeatures(shp_file, osgEarth::Features::Format::SHP, filter);
// 创建 shp 数据源,加载并显示
osg::ref_ptr<osgEarth::Features::FeatureModelLayer> layer = new osgEarth::Features::FeatureModelLayer(
featureSource, osgEarth::Features::Filter(), osgEarth::Style::Style(), mapNode->getTerrainEngine());
mapNode->addChild(layer);
// 运行 osgViewer 应用程序
osgViewer::Viewer viewer(arguments);
viewer.setSceneData(mapNode);
return viewer.run();
}
```
需要注意的是,上述代码可能需要根据实际情况进行修改和调试。
阅读全文