3

マップには多くの形状があり、それらはすべてこの配列内に保存されていarray_shapes_object[]ます。fitBounds メソッドでマップ上にそれらすべてを表示するにはどうすればよいですか?

次のようなものを使用できます。

map.fitBounds(circle.getBounds());

また

map.fitBounds(rectangle.getBounds());

また

var points = new google.maps.LatLng(arrayLatitude[aa], arrayLongitude[aa]);
bounds.extend(points);
map.fitBounds(bounds);

しかし、それらはすべて 1 つの形状に対してのみ機能し、複数の形状に対しては機能しません。形状は3種類だけのようです。(円、長方形、多角形)。

関数を実行するボタンをクリックしたときに、マップ上のすべての形状に合わせたいと思います。

4

2 に答える 2

7

表示するすべてのオブジェクトの境界を結合したgoogle.maps.LatLngBoundsオブジェクトを作成する必要があります。

ユニオン(その他:LatLngBounds) | LatLngBounds | この境界を拡張して、この境界と指定された境界の和集合を含めます。

擬似コード (マップに表示するすべての形状の境界を追加する必要があります):

var bounds = circle.getBounds();
bounds.union(rectangle.getBounds();
for (var aa=0; aa < arrayLatitude.length; aa++) {
  var points = new google.maps.LatLng(arrayLatitude[aa], arrayLongitude[aa]);
  bounds.extend(points);
}
map.fitBounds(bounds); 
于 2013-11-10T14:03:36.533 に答える
5
<script>
//This function get the canter of map in a way that all shapes are shown on the map.
function get_center()
{
    var bounds = new google.maps.LatLngBounds();
    var points = new Array();

    for(var counter = 0; counter < array_shapes_object.length; counter++)
    {
        switch(array_shapes_object[counter].type)
        {           
            case "rectangle":
            case "circle":                                            
              points = new google.maps.LatLng(array_shapes_object[counter].getBounds().getNorthEast().lat(), array_shapes_object[counter].getBounds().getNorthEast().lng());
              bounds.extend(points);

              points = new google.maps.LatLng(array_shapes_object[counter].getBounds().getSouthWest().lat(), array_shapes_object[counter].getBounds().getSouthWest().lng());
              bounds.extend(points);
            break;

            case "polygon":
              var paths;
              paths = array_shapes_object[counter].getPath();

              for(var i = 0; i < paths.length; i++)
              {
                  points = new google.maps.LatLng(paths.getAt(i).lat(), paths.getAt(i).lng());
                  bounds.extend(points);                  
              }

            break;
        }

        map.fitBounds(bounds);
    }               
}
</script>
于 2013-11-11T06:47:21.493 に答える