首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >要求Google街景全景图从原点开始

要求Google街景全景图从原点开始
EN

Stack Overflow用户
提问于 2018-08-11 13:53:48
回答 1查看 1.3K关注 0票数 2

我试图要求谷歌街景图像,以便我可以渲染完整的全景在一个球体在3D。

不幸的是,这个API只允许请求高达120°FoV。理想情况下,我需要一个等长方形的图像,我可以投射到这个领域。

然后,我检查了Google Maps在请求全景图像以获取洞察力时所做的请求,发现它发出的请求类似于以下内容:

https://geo0.ggpht.com/cbk?cb_client=maps_sv.tactile&panoid=${panorama_id}&output=tile&x=${tile_x}&y=${tile_y}&zoom=${zoom_level}&nbt&fover=2中,每个缩放级别将图像分割成更多的块,从而提供更高的分辨率。(视觉解释为这里)

这对于我正在做的事情来说是完美的--但是我发现它并没有从我通过元数据API得到的每个全景图中返回一个回复。

仔细观察,我发现Google有时会用不同的参数向不同的端点发出请求,有些甚至以完全不同的文件格式返回图像。

我现在很不确定如何从这里着手处理这个问题。我不能嵌入,因为我需要在一个已经3D的世界里渲染这个不能使用静态全景API,因为我不能从中获得完整的全景图像。

任何想法都很感谢,谢谢。:)

EN

回答 1

Stack Overflow用户

发布于 2019-07-22 08:53:41

您可以下载每个图像并将其保存在多维图像数组中。然后,您可以将每个瓷砖绘制到一个空白位图上。这篇文章解释了如何下载所有的瓷砖。

下面是我的c#代码,它接受全景ID并返回等长方形13312x6656位图,可以以任何图像格式保存:

代码语言:javascript
复制
public static Bitmap Panorama(string panoID)
    {
        ServicePointManager.DefaultConnectionLimit = Environment.ProcessorCount * 12;
        Image[,] images = new Image[26, 13];
        Parallel.For(0, 26, x =>
        {
            Parallel.For(0, 13, y =>
            {
                using (WebClient client = new WebClient())
                    images[x, y] = Image.FromStream(new MemoryStream(client.DownloadData(Get.TileURL(panoID, x, y)))); //converts downloaded byte array to image
            });
        });

        Bitmap result = new Bitmap(26 * 512, 13 * 512);
        for (int x = 0; x < 26; x++)
             for (int y = 0; y < 13; y++)
                 using (Graphics g = Graphics.FromImage(result))
                     g.DrawImage(images[x, y], x * 512, y * 512);
        return result;
    }

要获得url,您还可以使用cbk0.google.com。Get.TileURL:

代码语言:javascript
复制
public static string TileURL(string panoID, int x, int y, int zoomLevel = 5)
    {
        return "http://cbk0.google.com/cbk?output=tile&panoid=" + panoID + "&zoom=" + zoomLevel + "&x=" + x + "&y=" + y;
    }

Parallel.For循环只是为了加快速度,可以代替普通循环。

这个方法的唯一问题是它不适用于以CAoSLEFGMVFpcE开头的panos。我目前正在试图找到一个解决方案,如果我找到了解决方案,我将更新这个答案。

注意:这样做将违反谷歌的服务条款,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51800326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档