谷歌街景缩放到Fov

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谷歌街景缩放到Fov相关的知识,希望对你有一定的参考价值。

我需要完全按用户选择保存街景图像(包括panoID,航向,俯仰和fov)。我有以下代码:

            panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'));
            panorama.addListener('pano_changed', function () {
                $('#panoID').val(panorama.getPano());
            });
            panorama.addListener('pov_changed', function () {
                $('#heading').val(panorama.getPov().heading);
                $('#pitch').val(panorama.getPov().pitch);
                $('#fov').val(panorama.getZoom());
            });

问题是我想保存缩放为fov值https://developers.google.com/maps/documentation/streetview/intro(看看fov可选参数)

fov(默认为90)确定图像的水平视野。视野以度为单位表示,最大允许值为120.在处理固定大小的视口时,与设定大小的街景视图图像一样,视野本质上表示缩放,较小的数字表示更高的缩放级别。

我发现了一些“转换”信息https://developers.google.com/maps/documentation/javascript/streetview#TilingPanoramas

enter image description here

但它告诉我,fov可以到180,但是上一个。链接告诉120值是最大值。为什么?当然,我可以找到转换的比率,但也许存在正常的方式(即全景返回Fov而不是缩放)?

而且,似乎,捕捉放大pov_changed不是最好的方法。有时缩放不能正确更新

答案

找到以下函数从zoom转换为FOV:

var k = Math.pow(0.5051, zoom);
var fov = 103.7587 * k;

它的工作原理(几乎完全):)

添加

更精确的结果:

var fov = 180 / Math.pow(2,zoom) 

感谢trungk18

另一答案

您可以使用以下公式将fov转换为缩放:

  • fov来缩放: zoom = Math.log(180/fov)/(Math.log(2))

或相反亦然:

  • 缩放到fov: fov = 180 / Math.pow(2,zoom)

original answer

以上是关于谷歌街景缩放到Fov的主要内容,如果未能解决你的问题,请参考以下文章

html 街景和常规视图iframe谷歌地图代码

带有邮政编码的谷歌地图街景

如何在滚动视图中设置谷歌地图片段

转 threejs中3D视野的缩放实现

使用文本地址的谷歌地图街景地图

谷歌街景旋转相机与设备陀螺仪