Lý do cho điều này là chế độ xem phố POV là, theo mặc định hướng xe tải đang đối mặt khi hình ảnh được chụp (đi hình). Bạn cần phải nhận được vị trí của chiếc xe tải và vị trí của ngôi nhà và tính toán một "tiêu đề" từ vị trí đầu tiên thứ hai:
// 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 {
...
}
Một lừa/bẫy sử dụng xem đường phố là những gì bạn cần để có được những xem đường phố gần nhất với vị trí địa chỉ của bạn bằng cách liên tục gọi getPanoramaByLocation
với khoảng cách ngày càng tăng cho đến khi bạn thành công hoặc đạt được khoảng cách tối đa. Tôi giải quyết này sử dụng mã này:
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);
}
});
}
Nguồn
2013-10-03 00:43:08
Awesome, chính xác câu trả lời tôi đang tìm kiếm. Một số thông tin khác để triển khai: Bạn cần tải thư viện hình học: với thư viện tham số = hình học. Nếu bạn sử dụng getPanoramaByLocation(), trong hàm gọi lại của bạn, bạn sẽ nhận được đối tượng LatLng về vị trí của ô xem đường phố từ đối tượng dữ liệu: var carLatLng = data.location.latLng; và sử dụng đối tượng LatLng của mục tiêu của bạn để tính tiêu đề: var heading = google.maps.geometry.spherical.computeHeading (carLatLng, targetLatLng); để sử dụng với setPov() – Tilman
@manubkk bạn có thể thêm một jsfiddle không? – Omar
Một phần khó hiểu về điều này là 'computeHeading()' trả về một số trong khoảng từ -180 đến 180, trong khi thuộc tính 'heading' của đối tượng pov được mong đợi nằm trong khoảng từ 0 đến 360. Tôi đã giả định rằng chỉ cần thêm 180 cho kết quả của 'computeHeading()' sẽ thực hiện thủ thuật, nhưng tôi nhận được kết quả không nhất quán. – Trevor