我有以下问题,
我正在尝试显示特定地点(商业/谷歌地点 ID)的街景视图,但我给出的结果与您转到谷歌地图并搜索该地点时的结果不同。
示例:
通过 Places API 提取某个地点的位置,然后显示该位置的街景视图:
`
angular.module('plunker', ['ui.bootstrap', 'ngMap']).controller('MapDemoCtrl', ["$scope","NgMap",function ($scope, NgMap) {
var placeId = "ChIJ-ZH6_cu-woARgYPaF4eHwAw";
NgMap.getMap({id:'mapId'}).then(function(map){
var mapSV = map.getStreetView();
var placeS = new google.maps.places.PlacesService(map);
var streetS = new google.maps.StreetViewService();
placeS.getDetails({placeId:placeId},function(res){
console.log("Res",res);
var placeLocation = res.geometry.location;
map.setCenter(placeLocation);
mapSV.setPosition(placeLocation);
mapSV.setVisible(true);
window.place = res;
var marker = new google.maps.Marker({
position: placeLocation,
map: map,
title: "Place"
});
marker.addListener("click",function(ev){
console.log("dada",ev);
mapSV.setPosition(ev.latLng);
mapSV.setVisible(true);
})
});
})
}]);
`
https://plnkr.co/edit/H3ChFcmlQArCPfb2RCNI?p=preview
我希望拥有与谷歌地图显示的相同的街景位置,但相反,我得到了另一个指向业务不相关部分的位置。我如何获得正确的:
我在代码上添加了一张屏幕截图以供更多参考。
有时我得到的是一家企业的室内街景,但显示的是隔壁企业的室内,因为我要找的企业没有街景,但谷歌地图却显示了正确的室外街景。
API 似乎会捕捉到最近的道路并显示该位置的街景图像。
您可以尝试使用
StreetViewService
搜索最佳的可用全景图,而不是最近的全景图。此外,您还可以过滤掉所有室内全景。
NgMap.getMap({id:'mapId'}).then(function(map){
var mapSV = map.getStreetView();
var placeS = new google.maps.places.PlacesService(map);
var streetS = new google.maps.StreetViewService();
placeS.getDetails({placeId:placeId},function(res){
console.log("Res",res);
var placeLocation = res.geometry.location;
map.setCenter(placeLocation);
var panoRequest = {
location: placeLocation,
preference: google.maps.StreetViewPreference.BEST,
source: google.maps.StreetViewSource.OUTDOOR
};
streetS.getPanorama(panoRequest, function(panoData, status){
if (status === google.maps.StreetViewStatus.OK) {
mapSV.setPosition(panoData.location.latLng);
mapSV.setVisible(true);
} else {
//Handle other statuses here
mapSV.setPosition(placeLocation);
mapSV.setVisible(true);
}
});
window.place = res;
var marker = new google.maps.Marker({
position: placeLocation,
map: map,
title: "Place"
});
marker.addListener("click",function(ev){
console.log("dada",ev);
mapSV.setPosition(ev.latLng);
mapSV.setVisible(true);
})
});
})
我修改了示例:https://plnkr.co/edit/6haMg7hTd4mI6qLpeF5U?p=preview
希望这有帮助!
我注意到这个问题已经有 6 年历史了,但仍然没有真正解决上述问题。
我已经向谷歌开了一张票,谷歌表示他们将考虑为谷歌地点搜索 API 实施适当的解决方案。
如果您像我一样来到这个 stackoverflow 帖子,希望能得到一个有效的修复,请“星标”这个问题(如果它仍然对您有影响的话)(更多星标 = 谷歌功能列表雷达上的优先级更高)。