OSG 读取OSGB倾斜数据

OSGB数据是一个四叉树结构,本文测试使用OSG加载OSGB倾斜摄影测量数据。

示例数据

Code

1、遍历所有osgb数据文件生成空间索引
2、通过建立的空间索引加载数据

#include <iostream>
#include <string>
#include <filesystem>#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>using namespace std;static void findDir(const string& dir, vector<string>& subDirs)
{//subDirs.clear();for (auto& i : filesystem::directory_iterator(dir)) {if (i.path().string() == "." || i.path().string() == "..")continue;if (i.is_directory()) {subDirs.push_back(i.path().string());}}
}static std::string DirOrPathGetName(std::string filePath)
{size_t m = filePath.find_last_of('\\');if (m == string::npos){return filePath;}size_t p = filePath.find_last_of('.');if (p != string::npos && p > m)       {filePath.erase(p);}std::string dirPath = filePath;dirPath.erase(0, m + 1);return dirPath;
}void createObliqueIndexes(std::string fileDir)
{string dataDir = fileDir + "/Data";osg::ref_ptr<osg::Group> group = new osg::Group();vector<string> subDirs;findDir(dataDir, subDirs);for (size_t i = 0; i < subDirs.size(); i++){string name = DirOrPathGetName(subDirs[i]);string path = subDirs[i] + "/" + name + ".osgb";if (!filesystem::exists(path))continue;osg::ref_ptr<osg::Node> node = osgDB::readNodeFile(path);osg::ref_ptr<osg::PagedLOD> lod = new osg::PagedLOD();if (!node.valid())continue;//auto bs=node->computeBound();auto bs = node->getBound();auto c = bs.center();auto r = bs.radius();lod->setCenter(c);lod->setRadius(r);lod->setRangeMode(osg::LOD::RangeMode::PIXEL_SIZE_ON_SCREEN);osg::ref_ptr<osg::Geode> geode = new osg::Geode;geode->getOrCreateStateSet();lod->addChild(geode.get());std::string relativeFilePath = "./Data/" + name + "/" + name + ".osgb";lod->setFileName(0, "");lod->setFileName(1, relativeFilePath);lod->setRange(0, 0, 1.0);                                                                                          //第一层不可见lod->setRange(1, 1.0, FLT_MAX);lod->setDatabasePath("");group->addChild(lod);}std::string outputLodFile = fileDir + "/Data.osgb";osgDB::writeNodeFile(*group, outputLodFile);
}int main(int argc, char *argv[])
{if (argc < 2)return -1;if (!filesystem::exists(argv[1]))return -1;std::string fileDir = argv[1];std::string outputLodFile = fileDir + "/Data.osgb";createObliqueIndexes(fileDir);osgViewer::Viewer viewer;osg::Node * node = new osg::Node;node = osgDB::readNodeFile(outputLodFile);viewer.setSceneData(node);viewer.setUpViewInWindow(50, 50, 800, 600);return viewer.run();
}

构建

添加 C++17支持。

cmake_minimum_required(VERSION 3.15)
project(osgDemo)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_CXX_EXTENSIONS NO)find_package(OpenSceneGraph REQUIRED osgDB osgViewer)
include_directories(${OPENSCENEGRAPH_INCLUDE_DIR})
add_executable (osgDemo "main.cpp")
target_link_libraries(${PROJECT_NAME} ${OPENSCENEGRAPH_LIBRARIES})

OSG 库使用vcpkg编译安装。

测试



参考

  1. 倾斜摄影OSGB转换为3DTiles
  2. OSG加载倾斜摄影数据

OSG 读取OSGB倾斜数据相关推荐

  1. 读取OSGB数据的几种方式

    一.osg自带的osgviewer读取osgb数据 在接触osgb的时候,一般都会先配osg的环境,所以先介绍这种方法 1.1 打开单个osgb数据 需要打开cmd,cd到文件夹下 C:\Users\ ...

  2. Smart3D之手动配置 S3C 索引加载全部的OSGB瓦片数据

    2019.8.9更新:Smart3D现在对所有的.s3c文件都进行了加密,已经不能直接设置txt文件,但是依旧可以使用CC_S3CComposer.exe进行编辑创建.但是官网下载的.s3c文件还进一 ...

  3. 倾斜数据之加载——SuperMap iDesktop

    作者 赵爽 文章目录 1. 生成倾斜配置文件 参数设置 源数据 结果设置 模型参考点 ENU复选框 投影设置 坐标转换参数设置 2. 加载倾斜数据 使用产品:SuperMap iDesktop 产品下 ...

  4. 2021年大数据HBase(十三):HBase读取和存储数据的流程

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 HBase读取和存储数据的流程 一.HBase读取数据的流程 ...

  5. 从PCD文件写入和读取点云数据

    (1)学习向PCD文件写入点云数据 建立工程文件ch2,然后新建write_pcd.cpp  CMakeLists.txt两个文件 write_pcd.cpp : #include <iostr ...

  6. R语言导入、读取网络CSV数据(Read a CSV from a URL)实战:R原生read_csv、readr包、data.table

    R语言导入.读取网络CSV数据(Read a CSV from a URL)实战:R原生read_csv.readr包.data.table 目录 R语言导入.读取网络CSV数据(Read a CSV ...

  7. R语言使用haven包的read_spss函数读取spss格式数据、使用haven包的read_sas函数读取SAS格式数据、使用haven包的read_dta函数读取Stata格式数据

    R语言使用haven包的read_spss函数读取spss格式数据.使用haven包的read_sas函数读取SAS格式数据.使用haven包的read_dta函数读取Stata格式数据 目录

  8. 写入位置 0x00000004 时发生访问冲突_HDFS读取和写入数据简介

    HDFS 的文件访问机制为流式访问机制,即通过 API 打开文件的某个数据块之后,可以顺序读取或者写入某个文件.由于 HDFS 中存在多个角色,且对应的应用场景主要为一次写入.多次读取的场景,因此其读 ...

  9. php mysql 读取中文数据的函数_php读取mysql中文数据出现乱码的解决方法

    以下是对php读取mysql中文数据出现乱码问题的解决方法进行了介绍,需要的朋友可以过来参考下 1.PHP页面语言本身的编码类型不合适,这时候,你直接在脚本中写的中文肯定是乱码,不用说数据库了 解决方 ...

  10. python使用openpyxl读取数据_Python-openpyxl读取和写入数据1

    1.读取单元格保存到文件,注意python中文件报错或者不能写入时改文件后缀:.xls from openpyxl import Workbook from openpyxl import load_ ...

最新文章

  1. windows下vs2013使用C++访问redis
  2. 服务器可以装2个系统吗,云服务器可以装多个系统吗
  3. mysql select in 不存在返回0_MySQL索引优化看这篇文章就够了!
  4. 分享Silverlight/WPF/Windows Phone一周学习导读(11月14日-11月20日)
  5. 刚刚,中国估值最高的AI公司一口气发布11款产品,横跨5大领域
  6. LTE学习:同步信号
  7. 【宽度优先搜索笔记】BFS输出最短路径
  8. Clojure 学习入门(7)- 连接mysql
  9. 【MVC】VS常用技巧
  10. 大学生个人网站作业 超简单DIV CSS个人网页成品 简单个人网站作业模板 HTML个人网页设计下载 简约黑白色个人主页
  11. Airsim动态 | ROS教程(AirSim ROS Tutorial)
  12. html5 前端js框架,前端h5框架总结
  13. python去除图片背景_Python 图片去除背景
  14. 谷歌神经网络机器翻译NMT:人人可利用TensorFlow快速建立翻译模型
  15. 近代物理实验 核磁共振的稳态吸收(含数据及参考题)
  16. 第一章 大数据发展数据与鲲鹏大数据
  17. html文档定一层的标记,HTML基本结构和常用标记.doc
  18. python快递费用计算_Python实现快递查询
  19. PC傻瓜式安装黑苹果并打造成全能逆向工作站
  20. 史上最全面的python学生管理系统教程(二)

热门文章

  1. 词法分析器代码分析报告
  2. Python分类求和方法
  3. STM32F103如何使用串口下载程序
  4. 获取百度网盘提取码的两种方法
  5. Bex5文档服务器,不通过登录直接打开BeX5的首页和功能页的url是什么?
  6. js 导出 excel
  7. 链家全国房价数据分析 : 数据分析及可视化
  8. 用php照片艺术化,不满足简单修图?这些应用能让照片充满艺术感
  9. JS 正则表达式 手机号码正则
  10. Java 使用 Redis | 菜鸟教程