8

住所を指定してストリートビューを表示する単純なストリートビューがあります。

var geocoder = new google.maps.Geocoder();
var address = "344 Laguna Dr, Milpitas, CA  95035";
geocoder.geocode( { 'address': address}, 
    function(results, status) {
        //alert (results);
    if (status == google.maps.GeocoderStatus.OK) {
        //alert(results[0].geometry.location);
        myStreetView = new google.maps.StreetViewPanorama(document.getElementById("map_canvas"));
        myStreetView.setPosition(results[0].geometry.location);
        var marker = new google.maps.Marker({
            position: results[0].geometry.location, 
            map: myStreetView, 
            title:address
        });
        //alert ("yay");
    } else {
        alert("Geocode was not successful for the following reason: " + status);
    }
});

ご覧のとおり、住所のマーカーをストリート ビューに追加します。私の質問は、ストリート ビューが北を向いていて、マーカーが南を向いているということです。特定されていない住所の場合、ストリート ビューがデフォルトで北を指すのではなく、住所のマーカーを指すように指定するにはどうすればよいですか?

4

3 に答える 3

3

このサンプルをチェックしてください。V2 用ですが、コードを再利用できます。基本的には、computeAngle(markerLatLng, streetviewPanoLatLng) を呼び出して、ストリート ビュー パノラマのヨーを戻り値に設定する必要があります。

function computeAngle(endLatLng, startLatLng) {
  var DEGREE_PER_RADIAN = 57.2957795;
  var RADIAN_PER_DEGREE = 0.017453;

  var dlat = endLatLng.lat() - startLatLng.lat();
  var dlng = endLatLng.lng() - startLatLng.lng();
  // We multiply dlng with cos(endLat), since the two points are very closeby,
  // so we assume their cos values are approximately equal.
  var yaw = Math.atan2(dlng * Math.cos(endLatLng.lat() * RADIAN_PER_DEGREE), dlat)
         * DEGREE_PER_RADIAN;
  return wrapAngle(yaw);
}

function wrapAngle(angle) {
  if (angle >= 360) {
    angle -= 360;
  } else if (angle < 0) {
    angle += 360;
  }
  return angle;
 }
于 2010-07-08T23:28:11.017 に答える