OSGB简介及如何利用ArcGIS提取指定层级中的OSGB文件

OSGB简介及如何利用ArcGIS提取指定层级中的OSGB文件OSGB 简介 OSGB 全称为 Open Scene Gragh Binary 是开源三维渲染引擎 OpenSceneGra OSG 数据文件格式的二进制版本 同时也是目前倾斜摄影模型 尤其是使用 CC 处理的模型 常用的存储格式 OpenSceneGra 简介

大家好,我是讯享网,很高兴认识大家。

OSGB简介:

    OSGB全称为Open Scene Gragh Binary,是开源三维渲染引擎OpenSceneGraph(OSG)数据文件格式的二进制版本,同时也是目前倾斜摄影模型(尤其是使用CC处理的模型)常用的存储格式。

OpenSceneGraph简介:

    OpenSceneGraph是一个开源的,跨平台的高性能 3D 图形工具包,它完全用标准 C++ 和 OpenGL 编写,可以用来进行三维仿真,OSG包含的多线程技术,PagedLOD技术,可以方便的处理大数据的三维模型的可视化及其调度。OSGB格式数据是OpenSceneGraph框架的自有格式,是一种二进制数据。倾斜摄影数据是以OSGB格式来组织的树形结构的数据。

倾斜摄影数据组织结构

    如图,数据的组织结构如下:Data目录为数据入口目录,目录下包含很多子目录,如下,每个子目录为一个根块,每个根块是一个树形结构,是一个LOD层级结构。

图片
讯享网

图片

背景说明:

    在OSGB数据处理过程中 , 可能会遇到想要将特定层级或顶级OSGB瓦片文件夹提取出来进行单独处理的情况.写个pyt脚本就可以在ArcGIS Pro里面自动化处理了

01 工具界面

图片

参数说明

  • 输入目录(OSGB Tile文件夹的上级目录);
  • 输出目录:提取后OSGB瓦片文件夹的输出位置;
  • 提取级别:提取OSGB的指定级别,例如L15,这里填15就好,如果不填默认提取顶级;
  • 保留顶级OSGB:如果要保留顶级的,勾选此项.

02 关键代码

 '''提取指定级别OSGB文件''' def extractTop1(path,in_datafile,messages): messages.addMessage('Start') if os.path.exists(in_datafile): shutil.rmtree(in_datafile) pass else: os.makedirs(in_datafile) for dirpath, dirnames, filenames in os.walk(path): for dirname in dirnames: subfolder = os.path.join(dirpath, dirname) # input Tile folder tilename = os.path.basename(subfolder) newpath = in_datafile +"\\"+ tilename os.makedirs(newpath) for file in os.listdir(subfolder): crtfilepath = subfolder + "\\" + file basename = file.split('.')[0] fileExtension = file.split('.')[1] messages.addMessage(fileExtension) if fileExtension == 'osgb': if basename == dirname: newfilepath = newpath + "\\" + file messages.addMessage(newfilepath) shutil.copyfile(crtfilepath,newfilepath) # 提取其他层级OSGB def extractSpecLev(path,output,extrLev,saveroot,messages): #提取级别 sLev = 'L'+extrLev messages.addMessage('开始提取级别为【%s】的OSGB文件'%sLev) if os.path.exists(output): shutil.rmtree(output) else: os.makedirs(output) for dirpath, dirnames, filenames in os.walk(path): for dirname in dirnames: subfolder = os.path.join(dirpath, dirname) tilename = os.path.basename(subfolder) newpath = output +"\\"+ tilename os.makedirs(newpath) for file in os.listdir(subfolder): crtfilepath = subfolder + "\\" + file try: fileExtension = file.split('.')[1] except: messages.addMessage('No Extention File :'+file) fileExtension = 'osgb' basename = file.split('.')[0] if fileExtension == 'osgb': newfilepath = newpath + "\\" + file if saveroot == True: if basename == dirname: messages.addMessage(newfilepath) shutil.copyfile(crtfilepath,newfilepath) pass if sLev in basename: try: shutil.copyfile(crtfilepath,newfilepath) except: messages.addMessage('找不到文件') 

讯享网

欢迎关注公众号!共同学习!懒GISer

小讯
上一篇 2025-02-17 17:43
下一篇 2025-02-14 21:28

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/125757.html