如今,越来越多的企业使用街景来显示室内的公寓。

我的程序可以根据选定的业务显示街景。但是我不想在室内表演。仅在户外。因为在室内阻碍我移动,所以只能旋转360度。

如果我要在室内或室外展示,是否有人知道如何从街景API获取某些值?

非常感谢你,

到目前为止,这是我的代码片段,可以根据所选地址打开街景:

function load_map_and_street_view_from_address(address) {

var geocoder = new google.maps.Geocoder();
geocoder.geocode( {
    'address': address
}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        var gps = results[0].geometry.location;
        create_map_and_streetview(gps.lat(), gps.lng(), 'map_canvas', 'pano');
    }
 });
}


function create_map_and_streetview(lat, lng, map_id, street_view_id) {
var googlePos = new google.maps.LatLng(lat,lng);

addLatLng = new google.maps.LatLng(lat,lng);
var service = new google.maps.StreetViewService();
service.getPanoramaByLocation(addLatLng, 50, showPanoData);

}

function showPanoData(panoData, status) {
if (status != google.maps.StreetViewStatus.OK) {
    $('#pano').html('No StreetView Picture Available').attr('style', 'text-align:center;font-weight:bold').show();
    return;
}
$('#pano').show();
var angle = computeAngle(addLatLng, panoData.location.latLng);

var panoOptions = {
    position: addLatLng,
    addressControl: false,
    linksControl: false,
    panControl: false,
    zoomControlOptions: {
        style: google.maps.ZoomControlStyle.SMALL
    },
    pov: {
        heading: angle,
        pitch: 10,
        zoom: 1
    },
    enableCloseButton: true,
    visible:true
};

panorama.setOptions(panoOptions);

}

function computeAngle(endLatLng, startLatLng) {
var DEGREE_PER_RADIAN = 57.2957795;
var RADIAN_PER_DEGREE = 0.017453;

var dlat = endLatLng.lat() - startLatLng.lat();
var dlng = endLatLng.lng() - startLatLng.lng();

var yaw = Math.atan2(dlng * Math.cos(endLatLng.lat() * RADIAN_PER_DEGREE), dlat)
* DEGREE_PER_RADIAN;
return wrapAngle(yaw);
}

function wrapAngle(angle) {
if (angle >= 360) {
    angle -= 360;
} else if (angle < 0) {
    angle += 360;
}
return angle;
};

主要想法是获取Panorama的位置并验证到360度附近的最近位置的距离。

最佳答案

我似乎找不到用于此目的的任何正式API(也许将来它们会实现一个),而且我认为您不能确定室内瓷砖的描述是否为空。

我发现对我有用的是使用此API:
使用ll = LONG,LAT运行HTTP GET到以下地址:“http://cbk0.google.com/cbk?output=xml&ll=52.358445,4.88103

这是用于查找目标位置pano_id的内部API。它还为我们提供了一些有关如何使用它的信息:缩放级别,您所处的街道等。

我注意到,所有具有室内街景图像的坐标的结果在全景图的scene="_number" level_id="_id"标签中都具有data_properties。因此,对于每个位置,您都可以运行此请求并在结果XML的data_properties中查找这些值

一些例子:

indoors:
http://cbk0.google.com/cbk?output=xml&ll=52.358445,4.88103
http://maps.google.com/cbk?output=xml&ll=32.051626,34.7613

outdoors:
http://cbk0.google.com/cbk?output=xml&ll=52.358766,4.880494
http://maps.google.com/cbk?output=xml&ll=32.07782,34.785789

资料来源:Hacking google street view

更新

似乎要正确处理本地企业pano_id,您需要在请求中添加&it=all例:
http://cbk0.google.com/cbk?output=xml&hl=x-local&ll=34.058593,-118.240673&it=all

这是该地点的正确pano_id,您可以使用此API进行验证
http://cbk0.google.com/cbk?output=tile&panoid=70o9Pukc2KSjO-PfeHussw&zoom=3&x=5&y=1

关于javascript - 如何知道街景全景是在室内还是室外,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14796604/

10-12 13:11