2

現在、私は場所の配列を持っており、それらの場所の1つがマーカーになります。2番目のマーカーは、ユーザーが検索した場所に基づいています。

現在、コードは次のとおりです。

function find_closest_marker( lat1, lon1 ) {

  var pi = Math.PI;
  var R = 6371; //equatorial radius
  var distances = [];
  var closest = -1;

  var markers = allMyLocations;


  for( i=0;i<markers.length; i++ ) {

    var lat2 = markers[i][1];
    var lon2 = markers[i][2];

    var chLat = lat2-lat1;
    var chLon = lon2-lon1;


    var dLat = chLat*(pi/180);
    var dLon = chLon*(pi/180);

    var rLat1 = lat1*(pi/180);
    var rLat2 = lat2*(pi/180);

    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(rLat1) * Math.cos(rLat2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c;


    distances[i] = d;
    if ( closest == -1 || d < distances[closest] ) {
        closest = i;

    }



   var closestMarker = markers[closest];
   var newLat = markers[closest][1]
   var newLon = markers[closest][2]
   var b = new google.maps.LatLng(newLat, newLon);
   map.setCenter(b);
   map.setZoom(10);

   google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
     ShowHideMenu();

      if($('#newPos').length==0){
    $('div.gmnoprint').last().parent().wrap('<div id="newPos" />');
     }
     //showInfoWindow(map, closest);    

    });
  }
}

現在、このコードは、ユーザーが検索してページの中央に配置する場所から最も近い場所を取得します。私がやろうとしているのは、検索された場所が中央に配置され、配列内の場所がマップの領域内に収まるようにズームすることです。マップは通常のサイズではなく、790pxx400pxです。

誰かがズームのロジックとこれを可能にする方法を教えてくれますか?

4

1 に答える 1

6

LatLngBounds関数を試しましたか? この関数は、南西と北東の角に基づいて表示可能なものを作成します。その結果、ピンはマップの中央に配置されます。必要に応じてズームを使用できますが、ズームを省略して、目的の結果が得られるかどうかを確認することもできます。

コードのサンプルは次のようになります。

宣言する

var mybounds = new google.maps.LatLngBounds();

次に、マーカーを作成するイベントリスナー内に追加します

mybounds.extend(b);

そして最後にイベントリスナーの外

map.fitBounds(mybounds)
于 2012-08-10T19:55:11.297 に答える