Google Maps API v3を使用してポリラインのバウンディングボックスを見つける簡単な方法はありますか?データがマップに追加されたりマップから削除されたりするときに境界を更新する必要があるプロジェクトに取り組んでいます。これは、bd.extend(point)を実行するだけで非常に簡単です。ここで、bdはバインドされたオブジェクトであり、pointはLatLngオブジェクトです。問題は、データの削除を開始するときに、境界を変更してズームインしたいということです。これを実行できる組み込み関数はありますか、それとも自分で何かを作成する必要がありますか?
3 に答える
oenpelliのソリューションを拡張して、これはV2 APIから機能を再作成するために使用している拡張getBounds()メソッドです。これは私のプロジェクトでは完全に機能しています。
google.maps.Polyline.prototype.getBounds = function() {
var bounds = new google.maps.LatLngBounds();
this.getPath().forEach(function(item, index) {
bounds.extend(new google.maps.LatLng(item.lat(), item.lng()));
});
return bounds;
};
これは、API javascriptが読み込まれた後に追加する必要があるため、initメソッドで追加する必要があることに注意してください。
v2 APIには、GPolyline.getBounds()
まさにこれを行うためのメソッドがありました。ただし、 v3APIには同等のメソッドがないようです。
オブジェクトの状態が変化したときに通知を受け取るために、changed
プロパティをオーバーライドしてこれを処理することをお勧めします。次に、提案Polyline
MVCObject
した方法を使用してバウンディングボックスを計算できます。LatLngBounds.extend()
Googleは、APIを軽量に保つために、v3APIからそのようなメソッドを意図的に省略したと思います。数日前にStackOverflowで説明された同様の省略が、このGMap2.clearOverlays()
方法でした。
Polylineクラスを拡張して、独自のgetBoundsメソッドを追加することもできます。これを行う方法については、 google Maps api v3:クリックポリラインイベントの2つの既存のポイントの間にポリラインにポイントを追加するを参照してください。