OSG 读取OSGB倾斜数据
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编译安装。
测试
参考
- 倾斜摄影OSGB转换为3DTiles
- OSG加载倾斜摄影数据
OSG 读取OSGB倾斜数据相关推荐
- 读取OSGB数据的几种方式
一.osg自带的osgviewer读取osgb数据 在接触osgb的时候,一般都会先配osg的环境,所以先介绍这种方法 1.1 打开单个osgb数据 需要打开cmd,cd到文件夹下 C:\Users\ ...
- Smart3D之手动配置 S3C 索引加载全部的OSGB瓦片数据
2019.8.9更新:Smart3D现在对所有的.s3c文件都进行了加密,已经不能直接设置txt文件,但是依旧可以使用CC_S3CComposer.exe进行编辑创建.但是官网下载的.s3c文件还进一 ...
- 倾斜数据之加载——SuperMap iDesktop
作者 赵爽 文章目录 1. 生成倾斜配置文件 参数设置 源数据 结果设置 模型参考点 ENU复选框 投影设置 坐标转换参数设置 2. 加载倾斜数据 使用产品:SuperMap iDesktop 产品下 ...
- 2021年大数据HBase(十三):HBase读取和存储数据的流程
全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 HBase读取和存储数据的流程 一.HBase读取数据的流程 ...
- 从PCD文件写入和读取点云数据
(1)学习向PCD文件写入点云数据 建立工程文件ch2,然后新建write_pcd.cpp CMakeLists.txt两个文件 write_pcd.cpp : #include <iostr ...
- 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 ...
- 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格式数据 目录
- 写入位置 0x00000004 时发生访问冲突_HDFS读取和写入数据简介
HDFS 的文件访问机制为流式访问机制,即通过 API 打开文件的某个数据块之后,可以顺序读取或者写入某个文件.由于 HDFS 中存在多个角色,且对应的应用场景主要为一次写入.多次读取的场景,因此其读 ...
- php mysql 读取中文数据的函数_php读取mysql中文数据出现乱码的解决方法
以下是对php读取mysql中文数据出现乱码问题的解决方法进行了介绍,需要的朋友可以过来参考下 1.PHP页面语言本身的编码类型不合适,这时候,你直接在脚本中写的中文肯定是乱码,不用说数据库了 解决方 ...
- python使用openpyxl读取数据_Python-openpyxl读取和写入数据1
1.读取单元格保存到文件,注意python中文件报错或者不能写入时改文件后缀:.xls from openpyxl import Workbook from openpyxl import load_ ...
最新文章
- windows下vs2013使用C++访问redis
- 服务器可以装2个系统吗,云服务器可以装多个系统吗
- mysql select in 不存在返回0_MySQL索引优化看这篇文章就够了!
- 分享Silverlight/WPF/Windows Phone一周学习导读(11月14日-11月20日)
- 刚刚,中国估值最高的AI公司一口气发布11款产品,横跨5大领域
- LTE学习:同步信号
- 【宽度优先搜索笔记】BFS输出最短路径
- Clojure 学习入门(7)- 连接mysql
- 【MVC】VS常用技巧
- 大学生个人网站作业 超简单DIV CSS个人网页成品 简单个人网站作业模板 HTML个人网页设计下载 简约黑白色个人主页
- Airsim动态 | ROS教程(AirSim ROS Tutorial)
- html5 前端js框架,前端h5框架总结
- python去除图片背景_Python 图片去除背景
- 谷歌神经网络机器翻译NMT:人人可利用TensorFlow快速建立翻译模型
- 近代物理实验 核磁共振的稳态吸收(含数据及参考题)
- 第一章 大数据发展数据与鲲鹏大数据
- html文档定一层的标记,HTML基本结构和常用标记.doc
- python快递费用计算_Python实现快递查询
- PC傻瓜式安装黑苹果并打造成全能逆向工作站
- 史上最全面的python学生管理系统教程(二)