原因是街景POV默認爲卡車在拍攝圖像時所面對的方向(轉到圖)。你需要得到卡車的位置和房子的位置,並計算出一個「標題」從第一位置到第二:使用街景
// adrloc=target address
// svwloc=street-view truck location
svwService.getPanoramaByLocation(adrloc,svwdst,function(dta,sts) {
if(sts==google.maps.StreetViewStatus.OK) {
var svwloc=dta.location.latLng;
var svwhdg=google.maps.geometry.spherical.computeHeading(svwloc,adrloc);
var svwmap=avwMap.getStreetView();
svwmap.setPosition(svwloc);
svwmap.setPov({ heading: svwhdg, pitch: 0 });
svwMarker=new google.maps.Marker({ map:svwmap, position: adrloc });
svwmap.setVisible(true);
}
else {
...
}
另一個技巧/陷阱是,你需要獲得通過反覆調用getPanoramaByLocation
,以增加距離,直到您成功或達到某個最大距離,您的地址位置的最近街道視圖。我使用此代碼解決此問題:
var SVW_MAX=100; // maximum street-view distance in meters
var SVW_INC=10; // increment street-view distance in meters
var svwService=new google.maps.StreetViewService(); // street view service
var svwMarker=null; // street view marker
// NOTE: avwMap is the aerial view map, code not shown
...
resolveStreetView(avwMap.getCenter(),SVW_INC);
...
var resolveStreetView=function(adrloc,svwdst) {
svwService.getPanoramaByLocation(adrloc,svwdst,function(dta,sts) {
if(sts==google.maps.StreetViewStatus.OK) {
var svwloc=dta.location.latLng;
var svwhdg=google.maps.geometry.spherical.computeHeading(svwloc,adrloc);
var svwmap=avwMap.getStreetView();
svwmap.setPosition(svwloc);
svwmap.setPov({ heading: svwhdg, pitch: 0 });
svwMarker=new google.maps.Marker({ map:svwmap, position: adrloc });
svwmap.setVisible(true);
}
else if(svwdst<SVW_MAX) {
resolveStreetView(adrloc,svwdst+SVW_INC);
}
});
}
真棒,準確的答案我一直在尋找。一些實現的更多信息: 您需要加載幾何庫:參數庫=幾何。 如果您在回調函數中使用getPanoramaByLocation(),您將從數據對象中獲取街景車的位置的LatLng對象: var carLatLng = data.location.latLng; 並將其用於您的目標的LatLng對象以計算標題: var heading = google.maps.geometry.spherical.computeHeading(carLatLng,targetLatLng); 使用setPov() – Tilman
@manubkk你可以添加一個jsfiddle嗎? – Omar
一個令人困惑的部分是'computeHeading()'返回-180到180範圍內的數字,而pov對象的'heading'屬性預計在0到360之間。我假設簡單地添加180'computeHeading()'的結果本來可以做到,但是我得到的結果不一致。 – Trevor