提取谷歌3D地图中的模型

AP,Router

Updated on July 11, 2022 Posted by elmagnifico on July 11, 2022

Forward

之前一直以为,各种地图API可以直接拿到建筑的轮廓和高度等信息,从而可以自己直接利用这些信息来自动生成地图,后来发现根本不行,各家地图都不提供类似的API。目前有两种解决方案,但都比较麻烦,而且整体性不够高。

CADMAPPER

https://cadmapper.com/

可以通过这个网站,在1平方千米内获取模型信息免费

image-20220711095610603

可以转换成AutoCAD或者SketchUp、Rhino 5等格式,然后再通过他们转换成OBJ或者FBX给到Maya等软件。

https://www.bilibili.com/video/BV1FQ4y1S7Fa/?spm_id_from=333.788.recommend_more_video.1&vd_source=fe2e37e9c6518671631012d39f18a581

image-20220711100508620

这种模式有点问题,有些区域拿到的基本都是平面图了,高度信息是不足的,也有可能是不准确的的,所以实用度不是很高

Maps Models Importer

https://github.com/eliemichel/MapsModelsImporter

这是一个开源项目,通过提取Google地图中的模型信息,导出给Blender,然后再由Blender转成其他格式再使用。

大致原理是通过Inject到chrome的gpu进程中,然后直接获取gpu绘制时的输入数据,然后将这些数据导出成特定的格式,再进入blender中进行还原。

准备

首先需要4个东西

  • chrome
  • blender
  • RenderDoc
  • MapsModelsImporter

MapsModelsImporter每个发布版本会有具体的版本说明

image-20220711102746712

RenderDoc

RenderDoc 需要开启注入选项

image-20220711111417525

然后重启一下程序,Inject into Process就出现了

image-20220711111446627

blender

blender这里需要安装MapsModelsImporter插件

image-20220711114315101

选择刚下载的MapsModelsImporter-v0.5.0-rc1.zip

image-20220711114414590

然后使能插件

image-20220711114459995

使用

以管理员权限启动RenderDoc,选择注入

image-20220711112658805

进程过滤chrome

image-20220711112735476

关闭所有chrome,并且右下角也确保退出了,然后使用管理员权限打开运行下面的命令,以调试模式启动chrome

set RENDERDOC_HOOK_EGL=0
"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-gpu-sandbox --gpu-startup-dialog

或者下面的是x86的chrome启动

set RENDERDOC_HOOK_EGL=0
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-gpu-sandbox --gpu-startup-dialog

启动以后,会有一个弹窗提示 Chrome GPU使用的进程ID是什么,先别点击确定。

image-20220711140435594

在RenderDoc中先Refresh,然后勾选Google Chrome Gpu,接着Inject

image-20220711112923850

就会自动切换到捕获界面

image-20220711113245022

再回到Chrome,点击确定,chrome左上角会有debug信息,说明启动成功

image-20220711112528157

打开谷歌地图,切换到卫星地图,缩放到合适大小

https://www.google.com.hk/maps

稍微设置一点采集延迟,然后点击Capture After Delay,切到chrome中的地图界面

image-20220711140634884

稍等一下,采集以后会有一个 1 Captures saved.提示

image-20220711120458016

在RenderDoc中就能看到采集的数据了,然后右键保存即可。

image-20220711123553518

进入blender,在导入刚才的保存的rdc文件

image-20220711114749424

导入过程可能会卡好一会,稍等即可

image-20220711141959531

就能看到正确的模型了,再转成OBJ或者FBX即可,同时模型的贴图什么的也都是有的

image-20220711142912879

测试

建模

可以正确拿到建筑模型的,必须是在google地图中,可以通过旋转看到正确3D模型的,对于无法旋转查看的,基本都是没有建模的地方。

image-20220711142058046

image-20220711142117714

以下位置就是没有3D模式的地图,旋转以后,视角显示都是错误的

image-20220711142302093

image-20220711142314843

和深圳毗邻的香港就有完全的建模显示,而深圳基本就全没有。

没有建模的地方,就会显示成这样的平面或者直接显示不出来

image-20220711141647664

精细程度

对于模型的精细程度,不能要求太高,可以看到埃菲尔铁塔附件的很多花花草草,基本上都是一些不规则的多边形。

image-20220711141942616

谷歌地图本身能看的3D地图,也能看到实际的贴图存在各种扭曲、模糊等等情况,质量本身也不是很好。

image-20220711143248918

Summary

所以想要一键高清地图,还是必须得有对应的轮廓数据和高度数据,否则这种自动建模,意义不是很大,很多的地方基本都用不了,这种粗模还不如手动拉box呢

Quote

https://www.bilibili.com/video/BV1FQ4y1S7Fa/?spm_id_from=333.788.recommend_more_video.1&vd_source=fe2e37e9c6518671631012d39f18a581

https://www.youtube.com/watch?v=L8zuEJ0ADuQ&ab_channel=FreedomArts-3DAnimation%26GameDeveloper

https://www.youtube.com/watch?v=zjoRl1NZkgw&ab_channel=AshishJha