dictionary - 从 Google 街景中提取深度图

标签 dictionary depth google-street-view

许多帖子,例如this one像这样使用 Google 街景的 REST API:

http://maps.google.com/cbk?output=xml&ll=40.7625000,-73.9741670&dm=1

但是,这个 API 有时不起作用。

Google 街景似乎不依赖于该 REST API,它可能会将深度图存储在此元文件中:

https://www.google.com/maps/photometa/v1?authuser=0&hl=en&gl=us&pb=!1m4!1smaps_sv.tactile!11m2!2m1!1b1!2m2!1sen!2sus!3m3 !1m2!1e2!2sG2__WfQLZTzrsr7FP1wUyQ!4m57!1e1!1e2!1e3!1e4!1e5!1e6!1e8!1e12!2m1!1e1!4m1!1i48!5m1!1e1!5m1!1e2!6m1!1e1!6m1!1e2!9m36 !1m3!1e2!2b1!3e2!1m3!1e2!2b0!3e3!1m3!1e3!2b1!3e2!1m3!1e3!2b0!3e3!1m3!1e8!2b0!3e3!1m3!1e1!2b0!3e3!1m3 !1e4!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e10!2b0!3e3

但我不知道如何从中提取深度图。 Convert depth map (base64) of google street view to image这篇文章中使用Base64的方法不起作用,因为编码的字符串非常不同。

有人可以给我一些想法吗?非常感谢!

以下是一些用于从 Google 街景获取元文件的 Python 代码行:

def getPanoJS_frm_lonlat(lon, lat):
        url = "https://maps.googleapis.com/maps/api/js/GeoPhotoService.SingleImageSearch?pb=!1m5!1sapiv3!5sUS!11m2!1m1!1b0!2m4!1m2!3d{0:}!4d{1:}!2d50!3m10!2m2!1sen!2sGB!9m1!1e2!11m4!1m3!1e2!2b1!3e2!4m10!1e1!1e2!1e3!1e4!1e8!1e6!5m1!1e2!6m1!1e2&callback=_xdc_._v2mub5"
        url = url.format(lat, lon)
        return requests.get(url, proxies=None)

lon = -74.2249174
lat = 40.7040015
resp = getPanoJS_frm_lonlat(lon, lat)

line = resp.text.replace("/**/_xdc_._v2mub5 && _xdc_._v2mub5( ", "")[:-2]
# print(line)
jdata = json.loads(line)

print("This part may be the depthmap:")
print(jdata[1][5][0][5][3][2])

元文件中编码深度图的一部分(不太确定,整个字符串太长,无法在此处发布,请使用上面的代码下载元文件):

Q0RrQUFBSUFBUWdCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUURUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFRlZyZDFsalYwWmtVVGxoUlUxQmJYazRlaTFKYVdoMlZHYzJhbWhzZVVwNFJrNVNaRWRMYjNObFdVNWhVVk4zUXkxblJtTTBhM2hLYjFWTllYSTBjRFJtTmxOUFp6TnhRWEJ4VkRkSVVtaHVZMGN0T1Uxa1ptMXNXR2MzZDB4MVVGSkdVVVpOVEdRNGNIcFZSMWxSUkRoM0FBQUFBQUFBQUlBaWVzbTlzWFVnd1M3QzBUeXpzeHRCa0FHaE84WThtRUVxaENTX0lCRDN3Y1RYV3I3UkthTEJuZElYd0h0MkpzSmVZd0ZBZjM5Q3dzZjhjc0F2dGt2Q2VzV3d2X1dkY01JOTNRVEJsVGxBd2lKNlJzTEk4empDZVpKdHdvcXNPTUtvOXV6QnJzVTV3cDZNaXNMVDR6akNramtmd2h0U09jTFZaR2pDeUJBalF0cUZKOFBhS3pyQ01TM0N3dHp5SlVMUjF0WENmdklsUWl4WE1jT3I4ampDUGVjVXd1djJIMExfMk11OXJYN2dRUXJ6UHNKT2pBRkRES0dUdjRLdm0wTElEWnFfZG5HR1FnbGM1OEgwRUI1Q1BHU2V3WU1aSFVLV0xxSEI0eWdJd3lPakZjTEIwUUZEa2xGZHYzY1ZzRUl1RmtlX1RLRmhRc21tenJ3QjZUUkQxNThDdjdXZ3cwSkc5NEUtZXhUb1F1c1QzVUdUYmdKRGtlMzJRV2gtSDBJUjc2VkJUOFVlUWg3RkZFS3ViUUpERFlzalFvYzJJRUpTUTB0Q1RCd2dRbEhJY2tMV3RSOUNNVktiUVRGcVBNS1dIZVpCb2ZZOXdpQmFRRUowNTBIQ0Jud1pRcDV6UU1MNml0Q18wWWFjd3V6RG5FSTNFd25EZUNZc1FlODhQTUl1dThDX2tFLUt3dTF4RDhETVBzUEM0aGhCd241Z0lrSThfSG9fOTRRMFFwOExKa0ZoZUI1QzE3OTN3T3VORkVMSEQ1akJRZnM2d2c=

最佳答案

我最近也遇到了这个问题,我决定在 friend 的帮助下深入研究它。

我发现 GSVPanoDepth.js 库已经有一段时间没有更新了,但仍然具有解码和解析数据的基础知识。除了 url 发生了变化以及数据结构也发生了一些变化之外,一切都几乎相同。我 fork 了该存储库并更新了它以使用新的 url 和结构 - https://github.com/sidequestlegend/GSVPanoDepth.js

 // This url no longer works
    // url = "http://maps.google.com/cbk?output=json&cb_client=maps_sv&v=4&dm=1&pm=1&ph=1&hl=en&panoid=" + panoId;

    url = "https://www.google.com/maps/photometa/v1?authuser=0&hl=en&gl=uk&pb=!1m4!1smaps_sv.tactile!11m2!2m1!1b1!2m2!1sen!2suk!3m3!1m2!1e2!2s" +
        panoId +
        "!4m57!1e1!1e2!1e3!1e4!1e5!1e6!1e8!1e12!2m1!1e1!4m1!1i48!5m1!1e1!5m1!1e2!6m1!1e1!6m1!1e2!9m36!1m3!1e2!2b1!3e2!1m3!1e2!2b0!3e3!1m3!1e3!2b1!3e2!1m3!1e3!2b0!3e3!1m3!1e8!2b0!3e3!1m3!1e1!2b0!3e3!1m3!1e4!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e10!2b0!3e3"

    fetch(url)
        .then(res=>res.text())
        .then(res=>JSON.parse(res.substr(4)))
        .then(res=>res[1][0][5][0][5][1][2])
        .then(res=>{
            console.log(res);
            return res;
        })
        .then(dm => {
            var decoded, depthMap;
            try {
                decoded = self.decode(dm);
                depthMap = self.parse(decoded);
            } catch(e) {
                console.error("Error loading depth map for pano " + panoId + "\n" + e.message + "\nAt " + e.filename + "(" + e.lineNumber + ")");
                depthMap = self.createEmptyDepthMap();
            }
            if(self.onDepthLoad) {
                self.depthMap = depthMap;
                self.onDepthLoad();
            }
        })
        .catch(e=>{
            console.error("Request failed: " + url + "\n" + e);
            var depthMap = self.createEmptyDepthMap();
            if(self.onDepthLoad) {
                self.depthMap = depthMap;
                self.onDepthLoad();
            }
        });

关于dictionary - 从 Google 街景中提取深度图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64775547/

相关文章:

python - 如何使用键 :value format from a CSV file using Python? 创建字典列表

javascript - 减少谷歌地图成本,只调用谷歌地图 javascript api

javascript - 动画显示谷歌地图和谷歌街景的路线

xml - 使用 xpath 的元素嵌套计数表达式

python - 叶子处的二叉树深度

c++ - 显示属于树的深度路径的二叉搜索树的节点

ios - 谷歌街景嵌入式 iFrame 焦点跳转

algorithm - 高效查字典的方法

python - 如何在Python中将字典转换为数据框

ios - -[_ SwiftValue integerValue]:无法识别的选择器发送到实例0x60000044d560使用Google Mobile Vision时出错