12

目標: カスタム検索 (ジオコード) 機能を使用して、各結果を一覧表示してクリックし、マップに表示できるようにしたいと考えています。

募集: マップの範囲/ズーム レベルを適宜調整します。たとえば、「MA、USA」を検索するとマップがズームされ、マサチューセッツ州全体が表示されます。「ボストン、マサチューセッツ州、USA」を検索すると、ボストン エリアがズームされます。複数の結果を一覧表示する場合は、結果をクリックするときにも同じことが適用されます。

問題: geometry.bounds オブジェクトを fitBounds と共に使用できますが、ジオコーダーを使用して取得した結果の一部にその geometry.bounds オブジェクトがありません。

簡単な例: 「ボストン」を検索すると返されます

ボストン、マサチューセッツ州、米国
ボストン、インディアナ州、米国
ボストン、ケンタッキー州、米国
ボストン、ジョージア州 31626、米国
ボストン、セイラム、バージニア州 22713、米国
ボストン、ニューヨーク州 14025、米国

"Boston, KY" と "Boston NY 14025" には境界がありません。

質問: ジオコーダーの結果を適切なズーム レベルでマップに表示する信頼できる方法はありますか?

現在、私はそのようなものを使用していますが、これは醜く、ズームの問題は解決しません

if (results[0].geometry.bounds) {

    map.fitBounds(results[0].geometry.bounds);

} else {

    map.setCenter(results[0].geometry.location);
    // eventually set zoom here to some middle-range value (ugly)
}
4

2 に答える 2

20

右。両方の方法を試してテストした結果、次のことがわかりました。

  1. ドキュメントが言うように、geometry.boundsオブジェクトは「オプションで返されます」
  2. geometry.boundsオブジェクトが何に基づいているか正確にはわかりません
  3. geometry.bounds「推奨されるビューポートと一致しない可能性があります」と、多くの場合一致しません
  4. geometry.bounds私がテストした限り、ビューポート関数は常に同じ縦横比(約1.43)の長方形を返しますが、マップコンテナの寸法が何であれ、任意のサイズと形状の正方形または長方形を返します。

以下は、ドキュメントに記載されているカリフォルニア州サンフランシスコの例です。ビューポート関数を使用した
赤と青。geometry.bounds

カリフォルニア州サンフランシスコ

ソリューションは十分にシンプルで信頼性があります。

var resultBounds = new google.maps.LatLngBounds(

    results[0].geometry.viewport.getSouthWest(), 
    results[0].geometry.viewport.getNorthEast()
);

map.fitBounds(resultBounds);
于 2012-02-29T21:15:35.600 に答える
1

ビューポート オブジェクトには、境界オブジェクトを作成するために必要な情報が含まれています。このようなもの:

var bounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(results[0].geometry.viewport.southwest.lat, results[0].geometry.viewport.southwest.lng),
    new google.maps.LatLng(results[0].geometry.viewport.northeast.lat, results[0].geometry.viewport.northeast.lng)
);

次に、返された境界オブジェクトに対して行っているのと同じように、その新しい境界オブジェクトで fitBounds を使用できます。このような:

map.fitBounds(bounds);
于 2012-02-29T17:45:06.220 に答える