当前位置: 首页 > 编程日记 > 正文

CesiumLab V1.2 新功能 倾斜数据处理

一转眼又是一周的时间,我们的实验室功能又强大了。

照旧我们先放毒,放图,图,太晚了,字都敲不到一起了
CesiumLab V1.2 新功能 倾斜数据处理
lod以及包围盒
CesiumLab V1.2 新功能 倾斜数据处理
大雁塔实例,按楼层单体化
CesiumLab V1.2 新功能 倾斜数据处理
倾斜数据处理参数设置

简单介绍一下 CesiumLab 的 Osgb倾斜数据转3dtiles:
1,倾斜模型的精确匹配
CesiumLab 支持投影信息的自动读取 以及 界面输入

  自动读取:如果当前输入路径,例如  C:\data\dayanta 那么会自动尝试 读取 C:\data\metadata.xml,从此文件中提取投影和中心点界面输入:对于一些非contextcapture导出的osg,可能就没有这个metadata.xml,那么我们可以在界面上手动选择一个投影或者一个站心坐标系位置。这里其实我有一点点的疑惑,比如如果metadata.xml里是utm50N的投影,并且有个srsorigin模型的顶点坐标    + srsorigin 是 utm50N投影下的坐标值吗? 或者 模型的顶点坐标    仅仅是  srsorigin 和 utm50N 构造的站心坐标系下的 相对坐标 ?我现在是前者来处理的。对于小范围场景,几公里范围内,这个误差很小,我大概算了算,1公里误差在7厘米左右对于大范围场景,这个还是需要搞清楚,希望懂的人给解惑一下。

CesiumLab V1.2 新功能 倾斜数据处理
手工输入站心坐标(全球任意位置放置)
2, 倾斜模型的单体化 单体化,我的个人理解就是把倾斜模型按属性分割,3dtiles的batchid属性是绑定在每个顶点之上的,所以我们的单体化是基于顶点来做的,简单来说,就是判定每个顶点属于哪个属性面,然后通过batchid去赋予它属性。   
当然这块我稍微做了一下扩展,对垂直方向也进行了判定。   
拿我上传到qq群(595512567)文件的示例数据,大雁塔来说,其实在shp文件同一个位置,有8个面feature(基座到第七层各一个),每个feature的最大最小高度是不同的。倾斜模型中每个顶点逐个判断,属于那个高度范围,那么就绑定哪一层的属性。
CesiumLab V1.2 新功能 倾斜数据处理
大雁塔的单体化shp数据
当然在如果处理的时候没有设置最小高度字段和最大高度字段,那么顶点会忽略高度因素,完全按照多边形范围判定。
其它更新
1,dataserver 默认支持sqlite
虽然我很喜欢mongodb,但是为了非专业玩家考虑,我不得不忍痛割爱,大家再也不为mongodb安装所折磨了。具体看使用文档吧。
2,首页增加了码农工具

CesiumLab V1.2 新功能 倾斜数据处理
码农工具
我会逐步把我开发或者数据调试处理过程中用到的一些小公举放到这个模块下,这个模块只是为了调试方便,可能会有很多使用问题,大家选择使用吧 。
模型查看器:用threeejs做的一个模型浏览工具,threejs的各种模型解析应该都是社区贡献的,所以统一性并不是太好,我目前只是堆了gltf,dae,obj,ply等模型的代码进去,但是实在没精力去修正其中的各种问题,目前只能说gltf2.0的模型还是可以的,其它的模型还是不要尝试了,等我逐渐丰富把。
模型转换器: 前两天看有人在问osgb转gltf,反正在osgb转3dtiles的工具里,这个功能就是个顺手的事情,所以就把它给放出来了。计划这块以后引入assimp去支持更多的模型格式转换。
CesiumLab V1.2 新功能 倾斜数据处理
模型转换器
矢量转换器: 这个先挖一个小坑,等我有空就用ogr去填上
码农干货:
1, osgb文件的解析
这个直接用的osg的库,顺便说一下,osg库的数学函数(vec 和 matrix)非常棒,只要是图形学相关的东西,这套数学库非常实用。
2,有人问我geometricError怎么计算的
这个直译过来就是几何误差,也就是粗精度模型相对原始模型的几何偏差,单位是米,也就是数据分级(lod)的关键指标。
首先一原则,无论我们的3dtiles怎么计算,3dtiles的叶子节点(无children)的geometricError = 0,因为这就是表示原始模型,当然是无误差的。
说一下我是怎么计算的。
对于点云处理: 点云数据分级(lod)的关键是数据抽稀,我采用的算法是体素抽稀,说简单点,就类似二维图片的像素分辨率,抽稀阈值是 体素密度 N个/米 ,所以目前,我直接直接认定 非叶子节点的 点云块 geometricError = 1 / N 米
对于建筑物矢量面处理: 建筑物矢量面数据分级的关键是数据筛选,对于每个块,我们设定一个建筑物大小筛选阈值,也是直接拿则个阈值当 geometricError
对于osgb数据:osgb由于自带lod,osgb的lod用像素投影大小来定义的,核心问题就是把这个像素大小转为 geometricError,这块先卖个关子,等下次再说。
从上述的处理看出来了吧,其实我的处理方法没什么高深的,把很多问题简化了,绝对没有什么太深的理论算法计算,目前能用就行了,随着以后加深理解再说吧。
3,有人问我说osgb转gltf出不来什么原因
这个原因真的太多了:顶点不正确,包围盒不正确,矩阵偏移不正确都可能导致。
有些人说转出来的gltf是黑色的,这个一般是法向量的问题导致的。
我也是被这些看不见,黑色的问题各种折磨,不过还好我有cesiumlab的3dtiles预览工具,它具有定位,包围盒,位置中心等一键式功能,极大的方便了我的开发,也希望能帮到各位在做osgb转3dtiles工具的码农。
再吐槽一下gltf里的默认材质pbrMetallicRoughness,这个材质计算真是有点难调,怎么调颜色都不亮。我把cesium生成的shader截取出来了,竟然快一百行。几个关键的值:baseColorFactor基础颜色,我现在设定的白色。roughnessFactor 粗糙度我的理解是调整散射颜色的强度,metallicFactor我理解调整的反射颜色的强度。我来回对比了好多组合都没有太好的,下一步打算要么尝试看有没有禁用光照的方法,要么就自己写shader了,对于倾斜来,颜色本来就是照片生成的,已经带了光照信息,最简单的纹理采样就是原汁原味,不应该在shader来回再算光照。如果有简单的禁用光照的方法,望大家告知。
4,这回又被小bug折磨了三小时
最开始保存b3dm大致是这么写的

ofstream  of("c:\1.b3dm");of.write()....of.close文件正常生成了,可是在cesium中死活就是解析失败,经过跟代码发现buffer长度不对。最后c++里调试,发现 write一个2000长度的数组,文件长度竟然是 2010多,见了鬼了。c++高手估计该嘲笑我了,呵呵,我就不卖关子了,直接说原因:ofstream默认的打开方式是文本,对于文本的话存入的数据系统会经过编码处理,这样有些字符占用的位置就多了。因为b3dm是二进制解析,所以我们必须二进制打开文件,如下:

ofstream of("c:\1.b3dm", ios::binary); 这样就问题搞定。
其实这个问题我还是挺注意的,只是由于代码架构需要,打开文件和写文件并不在一个cpp里,容易被忽略。
一些测试数据:
https://pan.baidu.com/s/1aYWXZntVGx2-MZjiQVqzOg
后记:
终于终于把我前面挖的几个大坑(建筑物矢量面处理,osgb倾斜模型处理)都填上了。现在我又给自己挖了一个巨大的坑,Bim(ifc)数据转3dtiles,这个坑我现在还没底,不知道什么时候才填的上,大家等着吧。
另外我看到太多的同学因为max模型转换而苦恼,这个我原本是打算写max脚本的,但问题是这个脚本没办法集成到cesiumlab中,很难形成一个统一化的产品,所以我也在犹豫。如果有max模型转换的问题,可以私聊。
Cesiumlab是一款专为Cesium开源数字地球平台打造的免费数据处理工具集。目前包含地形数据处理、影像数据处理、点云数据处理、数据下载、建筑物矢量面处理等几大工具。同时提供一套java开发的数据服务器。形成从数据处理、服务发布、到代码集成的完整工具链。希望它能帮到您,欢迎反馈交流。

CesiumLab V1.2 新功能 倾斜数据处理

转载于:https://blog.51cto.com/14117342/2326968

相关文章:

参加海峡两岸城市地理信息系统论坛2010 年会(一张图、规划信息化和空间句法的碎碎念)...

上周末去清华建筑学院开了个会,叫做海峡两岸城市地理信息系统论坛2010 年会,主题很大,但是内容比较集中一些,就是围绕着GIS与城市规划。一天下来听了20个报告,挺佩服主办方的时间控制,这么密集的报告&#…

hdu 2087 剪花布条

http://acm.hdu.edu.cn/showproblem.php?pid2087 水题&#xff0c;注意细节就可以了。 代码如下&#xff1a; #include<iostream> #include<string>using namespace std;int main() {string s1,s2;while(cin>>s1&&s1!"#"){cin>>s2;…

感知机模拟或门的实现:权重和阈值的设置

def orGate(x1, x2):w1, w2, theta 0.5, 0.5, 0.4tmp x1 * w1 x2 * w2if tmp < theta:return 0elif tmp > theta:return 1print(orGate(1, 1)) print(orGate(0, 1)) print(orGate(1, 0)) print(orGate(0, 0))

apply call bind 简介

Function.prototype.call(thisArg [, arg1, arg2, ...]) call() 简述 call() 方法 调用一个函数, 其具有一个指定的 this 值和分别地提供的参数(参数的列表)。当第一个参数为 null、undefined 的时候&#xff0c; 默认 this 上下文指向window。call() 简单实例 const name qia…

自定义控件的构建(5)

Share 在ASP.NET框架中支持在回传中保存值的有2种方式&#xff1a;视图状态和控件状态 视图状态 ASP.NET中几个对象属性与控件最为密切的&#xff0c;就是ViewState了。 这里对其做下说明&#xff0c;任何可序列化类的实例均可添加到视图状态中&#xff0c;但是实际上&#xff…

Javascript之旅——第一站:从变量说起

原文出处&#xff1a; 一线码农的博客 欢迎分享原创到伯乐头条 工作这几年&#xff0c;js学的不是很好&#xff0c;正好周末有些闲时间&#xff0c;索性买本《js权威指南》&#xff0c;大名鼎鼎的犀牛书&#xff0c;好好的把js深入的看一看。买过这本书的第一印象就是贼厚&am…

从浏览器发展史读懂user-agent

世界上第一个浏览器&#xff1a;WorldWideWeb(和万维网重名)&#xff0c;改名Nexus&#xff0c;只能在NeXT系统运行。 世界上第二个浏览器&#xff1a;Line Mode Browser&#xff0c;C语言编写&#xff0c;只能显示文本&#xff0c;可以移植到不同系统。 世界上第三个浏览器(…

在把 png 或者 gif“储存为 web 所用格式”时,勾选“交错”选项

选择“交错”可创建在整个图像文件的下载过程中&#xff0c;在浏览器中以低分辨率显示的图像。“交错”可以使下载时间显得较短&#xff0c;并使查看者确信下载正在进行。但是交错也会增大文件大小。转载于:https://www.cnblogs.com/dongzhiquan/archive/2010/07/28/1994585.ht…

学习GraphX

首先准备如下社交图形数据&#xff1a;打开spark-shell&#xff1b;导入相关包&#xff1a;import org.apache.spark._ import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD创建如上graph对象&#xff1a;// Create an RDD for the vertices val users: RDD[(Ve…

安装NodeJS环境报错

Failures - (exited 1) - Error while running C:\ProgramData\chocolatey\lib\visualstudio2019-workload-vctools\tools\ChocolateyInstall.ps1. 待解决

Eureka单机高可用伪集群配置

Eureka Server高可用集群理论上来讲&#xff0c;因为服务消费者本地缓存了服务提供者的地址&#xff0c;即使Eureka Server宕机&#xff0c;也不会影响服务之间的调用&#xff0c;但是一旦新服务上线&#xff0c;已经缓存在本地的服务提供者不可用了&#xff0c;服务消费者也无…

小小21点模拟

#include<iostream> #include<string> #include<cstdlib> #include<ctime> using namespace std; struct Card //一张扑克牌 { int value; //点数 string color; //花色 string face; //1-10、J、Q、K面值 }; void initCards(Card *cards) { for(int i…

BZOJ-1005 明明的烦恼

Prufer编码练习题&#xff0c;这个编码是跟树的生成计数有关系的。 推荐这篇博文&#xff1a;http://www.cnblogs.com/zhj5chengfeng/archive/2013/08/23/3278557.html 介绍地挺全面生动形象 会了Prufer之后这道题还要用上组合数学来高精度计算。 #include <cstdlib> #in…

使用npm打包后生成的package.json中重要字段含义

{"name": "demo",// 包名称,不能和npm平台上其他包重复"version": "1.0.0",// 版本号"description": "","main": "index.js",// 执行入口"scripts": {// 自定义脚本"test&quo…

Winform窗体应用程序的自动更新功能

本文将演示一种桌面程序自动更新方案&#xff0c;其步骤比较多&#xff0c;但原理非常简单&#xff0c;通用性尚可&#xff0c;对于小型应用来说&#xff0c;直接拿去就可以用了。原理服务器端的结构是这样的&#xff1a;其工作原理如下&#xff1a;Update.asmx 仅提供一个功能…

[UWP] 用 AudioGraph 来增强 UWP 的音频处理能力——AudioFrameInputNode

原文:[UWP] 用 AudioGraph 来增强 UWP 的音频处理能力——AudioFrameInputNode上一篇心得记录中提到了 AudioGraph, 描述了一下 什么是 AudioGraph 以及其中涉及到的各种类型的 节点&#xff08;Node&#xff09;。 这一篇就其中比较有意思的 AudioFrameInputNode 来详细展开一…

Png透明背景的电话图标。

转载于:https://www.cnblogs.com/li0566/p/4343427.html

CSS改变nth-child()和nth-last-child()的参数灵活选择元素编号

注&#xff1a;下面的所有示例 1. div可以更换成任意标签 2. k是变量&#xff0c;可以换成特定数值&#xff0c;n保持不变 选中偶数行 div: nth-child(2n)div: nth-child(even) 选中奇数行 div :nth-child(odd)div :nth-child(2n-1) 选中前k行 div :nth-child(-nk) 选…

关于Silverlight中多项目共享DLL文件的讨论

假如你的解决方案中有两个Silverlight项目&#xff0c;其中的DLL文件时两个SL项目都使用到的&#xff0c;为了能够最大程度的减小XAP包的体积&#xff0c;你选择了系统的这个选项 编译后在Web的ClientBin文件夹下会出现这样的结构 这样呢&#xff0c;两个项目共享这些DLL的压缩…

核方法---径向基函数网络

为什么80%的码农都做不了架构师&#xff1f;>>> Nadarayas-Watson模型 转载于:https://my.oschina.net/liyangke/blog/2986510

c# 获取客户端IP地址方法

客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVariables.Get("Remote_Host").ToString(); 客户端浏览器IE&#xff1a; Request.Browser.Browser; 客户端浏览器 版本号&#xff1a; Request.Browser.M…

CSS结构选择器四种结构关系的范围

1. 空格&#xff1a; 表示<div>标签下所有的<h1>标签 div h1 2. >: 表示<div>标签下直接的<h1>标签 div>h1 3. ~:表示与<div>并列的所有<h1>标签 div~h1 4. :表示与<div>并列且紧邻的<h1>标签 divh1 注&#xff…

VMware前路难测,多个厂家群雄逐鹿

2019独角兽企业重金招聘Python工程师标准>>> 在人们高谈Salesforce、亚马逊等新兴云计算厂商取得的成就时&#xff0c;以VMware、HPE和Cisco为代表的老牌厂商也在进行着自己的转型和变化&#xff0c;而且还取得一定的进展。以VMware为例&#xff0c;虚拟机巨头公布了…

Silverlight学习笔记十七BingMap(六)之获取图片系统的图片信息ImageryService的应用...

BIngMap的ImageryService服务是一个微软发布的WCF服务&#xff0c;它用来获取图片系统的图片信息.服务地址&#xff1a;http://dev.virtualearth.net/webservices/v1/imageryservice/ImageryService.svc 本例中使用的是中文图片系统 效果如图 一、获取中文图片系统类&#xff0…

c++ stack 的使用

(1) stack::empty bool empty ( ) const; 判断是否为空。 return Value : true if the container size is 0, false otherwise; (2) stack::pop void pop ( ); 在栈的顶部移除元素。 (3) stack::push void push ( const T& x ); 在栈顶添加元素 (4) stack::size size_type …

ES和JS的区别,以及JavaScript的基本组成

JavaScript是语言&#xff0c;而ECMAScript(即ECMA-262,ECMA是欧洲计算机制造商协会)是为了规范JS而制定的标准&#xff0c;ECMAScript有不同版本&#xff0c;最近的版本是第10版&#xff0c;发布于2019.6。 完整的JavaScript的实现包含以下几个部分 核心(ECMAScript)&#x…

微软职位内部推荐-Senior Software Engineer-Eco

微软近期Open的职位:The MOD Ecosystem team is dedicated to expanding the reach and value of Office by enabling developers to create solutions built on the Office suite of applications or powered by the O365 services. &nbsp We have an exciting mix of cha…

转Meta的http-equiv属性详解

http-equiv顾名思义&#xff0c;相当于http的文件头作用&#xff0c;它可以向浏览器传回一些有用的信息&#xff0c;以帮助正确和精确地显示网页内容&#xff0c;与之对应的属性值为content&#xff0c;content中的内容其实就是各个参数的变量值。 meat标签的http-eq…

bzoj 2946 [Poi2000]公共串——后缀自动机

题目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id2946 对每个串都建一个后缀自动机&#xff0c;然后 dfs 其中一个自动机&#xff0c;记录同步的话在别的自动机上走到哪些点了&#xff1b;只要有一个自动机上走不下去了&#xff0c;就都走不下去了。每走到一…

CSS:当子元素皆浮动,撑开父元素的3种方式

1. 在子元素后面补充同级的空元素&#xff0c;并定义清除浮动样式 html文件 <main><div><span>肥水东流无尽期。当初不合种相思。梦中未比丹青见&#xff0c;暗里忽惊山鸟啼。</span><br><br><span>春未绿&#xff0c;鬓先丝。人间…