OpenStreetMap 转 3D

OpenStreetMap 转 3D, 省掉整条流程。

通常的路线是:用 Overpass 查询,用 GIS 工具清理,用脚本或插件拉伸,再用桌面 3D 软件打光。在 Studio 中只需一步:在地图上画一个框,OSM 的建筑、道路和水体就会拉伸成型并落在真实地形上。

左侧是一块地图区域,右侧是同一区域拉伸而成的 3D 模型
OpenStreetMapStudio,一次导入之后
Studio 的真实输出。地图数据 © OpenStreetMap contributors。

无需查询语言

你无需编写 Overpass QL,也无需处理 GeoJSON。画一个框,导入会向 OpenStreetMap 请求建筑、公路、水体和土地用途,并缓存结果。

改变几何体的标签

height、building:levels 和 min_height 决定建筑的高度及起始位置;roof:shape 和 building:part 决定顶部形状;highway 等级决定道路宽度;water 和 landuse 标签决定材质。

正确的单位与位置

所有内容都以框的中心为原点投影为米制,所以距离是准确的,你自己的模型也能以真实比例放入。

输出到你常用的工具

在付费方案中,可将结果导出为 GLB、glTF、OBJ、FBX 或 STL,供 Blender、Unreal、Unity 或切片软件使用。

每个标签会变成什么

布莱恩特公园旁带阶梯退台屋顶的曼哈顿中城高楼
曼哈顿中城:屋顶来自 NYC 3-D Building Model 的真实数据,缺口处由 OpenStreetMap 补足。

建筑还原地图中的高度

建筑轮廓按标注的高度或楼层数拉伸,并贴合地面放置。地图中标注的屋顶形状和建筑部件会被建出,小型住宅获得推断的山墙和四坡屋顶,平屋顶则带有女儿墙和屋顶设备。

导入的不同宽度的街道、一条带桥的河流,以及真实地形上的公园区域
按等级划分的道路、一座桥、水体和地表覆盖。

街道、水体与绿地

道路按等级确定宽度,带有人行道、车道标线和人行横道;桥梁横跨水面而不是沉入水中;公园、铺装和行道树补全其余部分。

从上空俯瞰摩纳哥的赫拉克勒斯港,港内的水一直填到码头和栈桥边
摩纳哥赫拉克勒斯港:由 OSM 海岸线建出的海洋。地图数据 © OpenStreetMap contributors。

由海岸线生成海洋

OpenStreetMap 只以海岸线表示海洋。导入会把这些线闭合成水体,所以港口和海湾的水面会一直填到码头边。

Studio 中的导入结果,在导入的城市旁列出了地图标注和估算的建筑高度
以纽约洛克菲勒中心为中心进行城市模式导入后的导入报告。

它会告诉你地图知道什么

导入报告会列出有多少栋建筑的高度来自地图、有多少是估算的,让你知道天际线可信到什么程度。

Studio 的导出对话框,已选择 GLB,背景是导入的下曼哈顿
导入地点的 GLB 导出。在 Blender 中:File ▸ Import ▸ glTF。

在 Blender 中完成

在付费方案中导出 GLB 或 FBX 并导入 Blender:以米为单位、真实比例,对象已经分开。

为什么选择 Mixos

每个标签会变成什么

OpenStreetMap 是一个带标签的点、线和多边形数据库,而不是 3D 模型。把它变成 3D 模型,意味着要为每一类要素决定它应该变成什么几何体。Studio 的导入按照 OSM 社区自己的 3D 约定所描述的方式做出这些决定。

建筑轮廓会变成封闭的底面(包括庭院的孔洞),并按其 height 标签拉伸。如果没有高度,就用 building:levels 乘以约 3 米代替;两者都没有时,导入会进行估算,并在报告中计入估算的数量。min_height 会抬起那些起点高于地面的部分,例如连廊或悬挑。roof:shape 会建出山墙、四坡、金字塔、单坡、穹顶或洋葱顶(复折、孟莎和半四坡屋顶会按最接近的形状绘制),building:part 将地标由各个部件组装出来,没有标签的小型住宅则获得推断的山墙或四坡屋顶。每个底面都放在其下方地形的最低点上,所以斜坡上不会有悬浮的建筑。

highway 线会变成宽度随等级变化的带状路面,从步道到高速公路,并铺在地形表面上。封闭的水域变成平坦的水面,而海洋在 OpenStreetMap 中只以海岸线表示,会根据这些海岸线闭合成水体。公园、草地和铺装等土地用途变成带有材质库材质的地表覆盖。地形本身来自开放的高程瓦片而不是 OSM,因为 OSM 自身没有高度。

OSM 数据采用开放数据库许可。只要署名 © OpenStreetMap contributors,你就可以使用由它构建的内容,包括商业用途。Studio 会把这条署名保存在场景中,使其不会在导入和渲染之间丢失。

每个标签会变成什么

常见问题

如何把 OpenStreetMap 数据转换成 3D 模型?

在 Studio 中打开「真实地点」选择器,画一个框并导入。建筑、道路、水体和地表覆盖会被自动拉伸并铺在真实地形上。你无需下载 .osm 文件,也无需编写 Overpass 查询。

可以把 OSM 建筑导入 Blender 吗?

可以。在 Studio 中构建该区域,然后在付费方案中导出为 GLB 或 FBX,再导入 Blender。如果你想留在 Blender 内部,免费的 BlenderGIS 和 Blosm 插件也能导入 OSM 数据。

它会读取哪些 OSM 标签?

带有 height、building:levels 和 min_height 的建筑轮廓;用于确定道路宽度的 highway 等级;水域;以及用于地面材质的 park、grass 和 paving 等土地用途。

为什么有些建筑的高度不对?

因为地图没有说明。当建筑没有高度或楼层标签时,导入会估算一个高度,并在报告中计入。在 OpenStreetMap 中补上标签,会对所有人生效。

这些数据可以免费商用吗?

可以,依据开放数据库许可,只要署名 © OpenStreetMap contributors。如果你把提取出的数据本身作为数据库再分发,ODbL 的相同方式共享条款也同样适用。

Mixos

省掉整条流程。 画一个框。