谷歌街景缩放到视野角(FOV)

5
我需要将街景图像按用户的选择(包括全景ID、方向、倾斜和视场)准确保存。我有以下代码:
            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中捕获缩放并不是最好的方法。有时缩放不会正确更新。
2个回答

8

我找到了以下将缩放转换为视场角(FOV)的函数:

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

它(几乎完全)有效 :)

添加

更精确的结果:

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

感谢trungk18的贡献。

2
{btsdaf} - trungk18

3
您可以使用以下公式将 fov 转换为缩放比例:
  • fov 转换为 zoom

    zoom = Math.log(180/fov)/(Math.log(2))

或者反过来:
  • zoom 转换为 fov

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

源答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接