在代码上使用API时,Google Place的街景与谷歌地图不一样

问题描述 投票:0回答:2

我有以下问题,

我正在尝试显示特定地点(商业/谷歌地点 ID)的街景视图,但我给出的结果与您转到谷歌地图并搜索该地点时的结果不同。

示例:

在谷歌搜索业务/地点:https://www.google.com.mx/maps/place/Adidas/@34.0838081,-118.3640503,17z/data=!4m12!1m6!3m5!1s0x80c2becbfdfa91f9:0xcc0878717da8381! 2s阿迪达斯!8m2!3d34.0840354!4d-118.3640653!3m4!1s0x80c2becbfdfa91f9:0xcc0878717da8381!8m2!3d34.0840354!4d-118.3640653?hl=es

通过 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

我希望拥有与谷歌地图显示的相同的街景位置,但相反,我得到了另一个指向业务不相关部分的位置。我如何获得正确的:

我在代码上添加了一张屏幕截图以供更多参考。

有时我得到的是一家企业的室内街景,但显示的是隔壁企业的室内,因为我要找的企业没有街景,但谷歌地图却显示了正确的室外街景。

angularjs google-maps google-maps-api-3 google-street-view
2个回答
1
投票

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

希望这有帮助!


0
投票

我注意到这个问题已经有 6 年历史了,但仍然没有真正解决上述问题。

我已经向谷歌开了一张票,谷歌表示他们将考虑为谷歌地点搜索 API 实施适当的解决方案。

如果您像我一样来到这个 stackoverflow 帖子,希望能得到一个有效的修复,请“星标”这个问题(如果它仍然对您有影响的话)(更多星标 = 谷歌功能列表雷达上的优先级更高)。

https://issuetracker.google.com/issues/299334163?pli=1

© www.soinside.com 2019 - 2024. All rights reserved.