今天,越来越多的企业使用街景来展示室内公寓。
我的程序提供了根据所选业务显示街景的功能。但我不想在室内露面。只在户外。因为Indoors阻止我移动,只能转动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;
};
主要想法是获取全景位置并验证距离360度最近的地方的距离。
答案 0 :(得分:9)
我似乎无法找到任何正式的API(可能在未来他们将实现一个),我认为你不能确定室内瓷砖将是空的描述。
我发现为我工作的是使用此API: 运行HTTP GET到这个地址:“http://cbk0.google.com/cbk?output=xml&ll=52.358445,4.88103”,ll = LONG,LAT
这是用于查找目标位置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
<强>更新强>
为了让本地企业正确使用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
答案 1 :(得分:3)
以下是我向Google提交的功能请求:
“禁用室内街景的选项”
https://code.google.com/p/gmaps-api-issues/issues/detail?id=4831
随意在那里出票以帮助它获得一些关注
(这是礼节性的吗?......还不是真正的答案),但似乎值得在这里分享,所以有兴趣的人可以加注/跟踪票证。
答案 2 :(得分:2)
过滤掉室内街景全景图的功能已于不久前在Google Maps JavaScript API中实施。
您可以使用StreetViewService仅搜索室外全景图。在请求中,您应将源指定为户外
https://developers.google.com/maps/documentation/javascript/reference/3/#StreetViewSource
查看以下示例代码,演示如何仅获取室外全景图
var panorama;
function initialize() {
var svService = new google.maps.StreetViewService();
var panoRequest = {
location: new google.maps.LatLng(37.800953,-122.436738),
preference: google.maps.StreetViewPreference.NEAREST,
radius: 50,
source: google.maps.StreetViewSource.OUTDOOR
};
svService.getPanorama(panoRequest, function(panoData, status){
if (status === google.maps.StreetViewStatus.OK) {
panorama = new google.maps.StreetViewPanorama(
document.getElementById('street-view'),
{
pano: panoData.location.pano,
pov: {
heading: 10,
pitch: 10
}
});
} else {
//Handle other statuses here
}
});
}
&#13;
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#street-view {
height: 100%;
}
&#13;
<div id="street-view"></div>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&callback=initialize">
</script>
&#13;
我希望这有帮助!