2011-08-15 29 views
35

Tôi hiện đang sử dụng Google Street View Panorama embed và tôi muốn nhận được POV (cụ thể hơn là tiêu đề) cho một địa chỉ cụ thể.Lấy POV cho API Google StreetView

Google thực hiện điều này qua maps.google.com, trong đó, được đưa ra một địa chỉ, nó sẽ thả bạn vào chế độ xem phố và nó sẽ đối mặt đúng cách. Tuy nhiên, tôi không thể tìm ra/tìm tài liệu cho một cách để tìm tiêu đề POV qua API.

Tôi có thể làm cho tính năng nhúng Chế độ xem phố hoạt động tốt với LatLng, nhưng máy ảnh thường phải đối mặt với hướng sai. Bất kỳ ý tưởng?

chỉnh sửa: rõ ràng

tôi muốn thiết lập các POV, nhưng tôi không biết những gì giá trị để đặt nó vào ...

Trả lời

38

Địa chỉ của địa chỉ được yêu cầu và vị trí của vị trí toàn cảnh (vị trí của ô tô đường phố nơi ảnh được chụp) không giống nhau. Theo như tôi biết, API không đặt tiêu đề theo đúng hướng của địa chỉ latlng, bạn sẽ phải tự đặt nó.

Đây là cách tôi đã làm nó, tôi đã sử dụng StreetViewService để tìm bắn panorama gần nhất có sẵn và sau đó tính toán Pov tiêu đề bằng cách sử dụng phương pháp computeHeading here

+13

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

+2

@manubkk bạn có thể thêm một jsfiddle không? – Omar

+1

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

-3

Không thể nói nếu bạn muốn nhận được hoặc thiết lập POV

để thiết lập theo hướng dẫn tại đây: http://code.google.com/apis/maps/documentation/javascript/services.html#StreetViewPanoramas

var panoramaOptions = { 
    position: fenway, 
    pov: { 
    heading: 34, 
    pitch: 10, 
    zoom: 1 
    } 
}; 

để có được:

012.
alert(panoramaOptions.pov.heading); 
+0

Tôi muốn thiết lập nó, nhưng tôi không biết những gì để thiết lập nó để –

+0

vì vậy bạn muốn muốn thiết lập tiêu đề để úp mặt xuống đường – Galen

29

Chỉ cần những gì manubkk nói, tôi đang sử dụng đoạn mã sau để có được tiêu đề SV phù hợp

var $this = $(this), 
    _lat = $this.data("lat"), 
    _lng = $this.data("lng"), 
    streetViewMaxDistance = 100;   

var point = new google.maps.LatLng(_lat,_lng); 
var streetViewService = new google.maps.StreetViewService(); 
var panorama = spaces.map.map.getStreetView(); 

// We get the map's default panorama and set up some defaults. 
    // Note that we don't yet set it visible. 


//panorama = spaces.map.map.getStreetView(); 

streetViewService.getPanoramaByLocation(point, streetViewMaxDistance, function (streetViewPanoramaData, status) { 

    if(status === google.maps.StreetViewStatus.OK){ 

     var oldPoint = point; 
      point = streetViewPanoramaData.location.latLng; 

     var heading = google.maps.geometry.spherical.computeHeading(point,oldPoint);    

     panorama.setPosition(point); 
     panorama.setPov({ 
      heading: heading, 
      zoom: 1, 
      pitch: 0 
     }); 
     panorama.setVisible(true); 

    }else{ 
     $this.text("Sorry! Street View is not available."); 
     // no street view available in this range, or some error occurred 
    } 
}); 
+0

Làm việc thật tuyệt vời-- cảm ơn! – Yarin

-1

Nếu bạn muốn đặt POV về phía đường phố hoặc 90 độ phải/trái tương ứng với đường phố đó, tôi đã triển khai giải pháp.

Google Street View heading issue

Tôi hy vọng điều đó sẽ hữu ích.

4

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); 
      } 
     }); 
    } 
+0

Tôi không biết đây có phải là phương pháp hay nhất hay không, nhưng sự gia tăng hoạt động tốt. – Trevor

+0

@Trevor: Yeah; Tôi yêu một cách tốt hơn để làm điều đó. Dường như ngu ngốc rằng Google không có cách nào để có được cái nhìn gần nhất trong một số giới hạn. –

2

Tôi tìm thấy trang này rất hữu ích, cảm ơn các bạn. Tôi vẫn cần phải kết hợp với nhau giải pháp đầy đủ từ điều này và một vài nguồn vì vậy tôi nghĩ rằng tôi sẽ bao gồm nó ở đây cho bạn.

<script> 
var panorama; 

    function loadStreetView() { 

    var _lat = your_lat; 
    var _lng = your_long; 

    var target = new google.maps.LatLng(_lat,_lng); 

    var sv = new google.maps.StreetViewService(); 

    panorama = new google.maps.StreetViewPanorama(document.getElementById('hero-street-view')); 

    var pano = sv.getPanoramaByLocation(target, 50, function(result, status) { 

     if (status == google.maps.StreetViewStatus.OK) { 

     var heading = google.maps.geometry.spherical.computeHeading(result.location.latLng, target); 

     panorama.setPosition(result.location.latLng); 
     panorama.setPov({ 
      heading: heading, 
      pitch: 0, 
      zoom: 1 
     }); 
     panorama.setVisible(true); 

     } 
     else { 

     console.log("Cannot find a street view for this property."); 
     return; 

     } 

    }); 
    } 

    </script> 

    <script async defer 
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=geometry&callback=loadStreetView"> 
    </script>