调研报告之城市三维模型

标签: 三维 分类: 杂文 创建时间:2020-09-30 06:40:41 更新时间:2023-10-20 11:23:28

前言

进行三维开发,首先要获取城市的建筑物模型,没有纹理的模型,俗称就是白膜。

在bilibili的一个视频上,我知道了三种创建城市建筑物模型的方式,第一种就是使用skp2osm这么一个插件,从osm数据导入到sketchup。但是经过我的测试,按原样的方法我下载了杭州的某一个地方的osm数据,将osm数据导入到sketchup中,只有平面的图形,而没有建筑物的高度信息,不知道视频中是如何做出来的。其他的两种方法,都是要收费的,199刀,估计老板也不愿意出钱买。后来发现了一个osm2world的软件,好像还可以,生成了需要的三维模型。

参考文章:
1.一键生成国内城市建筑模型—百度地图数据获取 (这个不知道能不能成功,但是实际上我还没试,这里的百度网盘也已经失效了)
2.一键制作任意城市建筑场地模型-gis小技巧
3.MapGis可视化—-城市建筑物高度数据获取方法 (城市中建筑物的高度信息的获取)
4.osm2world
5.ArcGIS三维入门(2-19)城市建筑物数据的获取 (建筑物数据获取的方法,包括建筑物高度的获取包括影像,雷达以及建筑物专题数据库,和参考文章3其实是一样的)
6.如何利用ArcGIS提取天地图建筑轮廓 (使用ArcMap提取建筑物的轮廓,原始的文章我忘记在哪里获取到了,但是实际上呢,大体的思路还是一样的。这里使用的是水经注地图下载器,下载了地图,但是其他的地方好像没有需要下载地图。)
7.如何利用ArcGIS提取天地图建筑轮廓 (这是上一篇文章的知乎版)
8.还在用GH爬取OSM?对不起!我用GIS分分钟就可以做出来城市整体模型! 这个感觉很吊的样子

1.skp2osm

这个工具主要用来将osm数据导入到sketchup软件中,可以作为底图,进行模型位置的校正。
(1) 下载

(2) 解压后,将OSM文件夹和osm.rb文件,复制到C:\Users[用户名]\AppData\Roaming\SketchUp\SketchUp 2020\SketchUp\Plugins文件夹下

(3) 打开Sketchup软件,选择File->Import,可以选择导入osm数据

参考文章:
1.skp2osm (维基百科)

2.osm2world

这个工具主要用来将osm数据生成obj格式的模型,在该工具中打开osm数据,如果原有的osm数据建筑物有高度信息,则会生成相应高度的建筑物模型,如果没有高度信息,也会自动随机生成同等高度的建筑物模型,虽然不能很好的满足需求,但也是可以简单的查看一个三维建筑物模型了。
(1) 下载

(2) 解压后,运行解压目录下的osm2world-windows.bat文件。

(3) 选择需要进行三维处理的osm数据

(4) 生成三维模型

这个软件,还可以将生成的3d模型导出三维obj格式。

3.生成3dtiles

经过尝试和修改,在生成免费的城市三维模型中,主要用到了两个建模软件一个是sketchup,一个是3dmax。一个自动模型生成工具osm2world,还有一个就是sketchup的插件skp2osm。当然,使用免费的工具,就会有诸多的限制

(1) 下载osm数据

(2) 适用osm2wrold生成三维模型,并导出obj格式

(3) 在3dmax中导入上一步的obj,需要作为单个网格导入,并选择需要导入的建筑物模型,把不需要导入的部分忽略

(4) 将处理后的建筑模型,重新导出obj

(5) 适用CesiumLab软件,将导出的处理后的建筑物模型obj,进行切片

(6) 适用Cesium.js加载最后的3d tiles格式的文件

最终的效果如下:

4.geobuilding

在研究 segment-anything 的时候,无意间找到了一个大神写的工具-——geobuilding,这个工具不开源,有很多的方法获取城市白膜数据,显得非常的专业。

5.其他方法

参考文章:
1.Cesium项目实战(3)-城市建筑三维白膜数据的制作与效果展示 (三维城市的数据获取,处理步骤以及其他的一些流程,通过shp文件,借助于CesiumLab软件生成3dTile切片。还包括了一些设置建筑物的颜色,根据高度设置不同的建筑物颜色等)
2.如何快速获取高清3D城市模型 (这里讲了如何获取高德地图的三维数据,但是导出的数据是一张图,而不是三维模型)
4.一键制作任意城市建筑场地模型-gis小技巧 (这是个系列知乎文章,还是蛮不错的,但是关注公众号之后,回复的内容,百度网盘也已经失效了)
5.Blender 地形-影像-城市白膜生成 借助于Blender GIS,QGIS OSM等插件,提取OSM中的城市白膜信息。
6.cesium osm building 白模下载

6.数据加载

问题

1.3dmax导入obj出现无效的顶点索引问题

使用3dmax打开osm2world导出的obj,会出现“无效的顶点索”这个错误。

解决方法,就是再导入obj时设置“作为单个网格导入”

参考文章:
1.max2010导入obj时提示无效的顶点索引 (回答的很好)

2.CesiumLab导出模型为空白

在适用3dmax加载模型后,然后导出obj之后,适用CesiumLab进行模型的切片,但是最后输出文件夹中总是空白的,让我很恼火,也浪费了很长的时间在上面,在群里问他们也出现了同样的问题,但是没有人帮助解决。

最后的解决方案其实是因为obj或者是fbx格式的文件,不能带中文。如果待处理的文件中包含中文,最后输出文件夹中就是一个空白的内容。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。