20

ドメインモデルのオブジェクトにアタッチされ、ページのマップに追加されたGPolygonオブジェクトのセットがあります。ドメインオブジェクトは同じページのリストに表示されており、ユーザーがそれらの1つをクリックすると、関連するポリゴンが表示されます。

ポリゴン全体を表示したいのですが、理想的には、マップをポリゴンの中心に配置したいと思います。

私は...の線に沿ってmapsAPI呼び出しがあることを望んでいました。

myMap.makeSureYouCanSeeAllThisPolygon(aPolygon);

しかし、私はそれを見つけることができませんでした。

これを手動で行う必要がある場合は、明らかにセンタリングを簡単に把握できますが、ズームを把握するにはどうすればよいですか?

4

6 に答える 6

81

getBounds()Google Maps v3 API は、google.maps.Polygon クラスのメソッドをネイティブにサポートしていません。fitBounds()これは、google.maps.Map クラスにメソッドがあり、まさに探しているものであるという事実を考えると、奇妙に思えます。Google Maps API を何らかの頻度で使用する場合、これはトリックのバッグに入っているはずです。 ::

getBounds()google.maps.Polygon クラスのメソッド

google.maps.Polygon.prototype.getBounds = function() {
    var bounds = new google.maps.LatLngBounds();
    var paths = this.getPaths();
    var path;        
    for (var i = 0; i < paths.getLength(); i++) {
        path = paths.getAt(i);
        for (var ii = 0; ii < path.getLength(); ii++) {
            bounds.extend(path.getAt(ii));
        }
    }
    return bounds;
}

この方法を手元に置くと、マップ上のポリゴンを中心に配置して合わせることが非常に簡単になります。

注 : よく知らない場合でも問題ありませんがgetAt()getLength()これらは google.maps.MVCArray クラスに固有のメソッドです。ポリゴンのメソッドを呼び出すと、getPaths()LatLng の配列が変更可能な LatLng の MVCArray として返されます。ここで MVCArray について準備できます - Google マップ v3 API MVCArray クラス

先に進みます。これがフレームワークです。この次のコードの前に、上記のプロトタイプ メソッドをどこかに実装する必要があります。

var map = new google.maps.Map(container, opts); // I'll spare the details on this

var coords = [
    new google.maps.LatLng(25.774252, -80.190262)
    ,new google.maps.LatLng(18.466465, -66.118292)
    ,new google.maps.LatLng(32.321384, -64.75737)
    ,new google.maps.LatLng(25.774252, -80.190262)
];

var myPolygon = new google.maps.Polygon({
    paths: coords
    ,strokeColor: "#A80000"
    ,strokeOpacity: 0.8
    ,strokeWeight: 1
    ,fillColor: "#0b2a32"
    ,fillOpacity: 0.12
});

ステージ セットがあれば、この (または任意の) ポリゴンを中心にしてズームするために必要なことは、次のとおりです::

map.fitBounds(myPolygon.getBounds());

短くて甘い。それが役立つことを願っています。

-ケビン・ジェームズ

于 2011-06-14T05:17:30.610 に答える
2

メソッドで返されたaPolygon.getBounds().getCenter();を使用してから、ポリゴンの中心点を取得できます。GLatLngmyMap.setCenter()

ズーム レベルを取得するには、myMap.getBoundsZoomLevel(aPolygon.getBounds());これをmyMap.setZoom()メソッドで使用します。

于 2010-02-01T14:34:38.997 に答える
2

彼は次のように述べていると思います:

map.fitBounds(myPolygon.my_getBounds());

御馳走を働きます。

于 2013-12-15T14:29:03.007 に答える
1

このソリューションは、マップに既に正常に追加されたポリゴンに対して機能しました。google.maps.Polygon クラスに getBounds() メソッドを追加し、次に map.fitBounds(myPolygon.getBounds()); を使用します。

于 2012-07-19T22:25:23.667 に答える