0

jQuery 1.7 と最新の jQuery Mobile を Google Maps Places ライブラリと共に使用しています。

プラグインを使用していない (可能であれば、使用したくない) ことを除いて、ポリラインに関するこの質問と同様の問題に直面しています。

あるページのボタンをクリックすると、同じドキュメント内の別のページにマップが表示されます。

以下のコード スニペットを使用して、すべての検索結果を読みやすく、できるだけズームインして表示しようとしています。

var bounds = new google.maps.LatLngBounds();
for(var i=0; i<results.length; i++)
{
    var resCoOrds = new google.maps.LatLng(results[i].geometry.location.lat(), results[i].geometry.location.lng());
    var marker = new google.maps.Marker({
        position : resCoOrds, 
        map : myMap, 
        icon: myMarkerIcon
    });

    makerList.push(marker);

    google.maps.event.addListener(marker, 'click', function()
    {
        var resInfoWindow = new google.maps.InfoWindow({content:liContent});
        resInfoWindow.open(map, this);
    });


    bounds.extend(resCoOrds);
    myMap.fitBounds(bounds);
}

私の問題は、上記の最後の行の結果です!

最初のマーカーの追加は期待どおりに機能しますが、2 番目のマーカーを追加すると、マップがズームアウトされて、すべての検索結果がマップ上の小さな点に一緒に表示され、ユーザーがズームインする必要があり、目的を果たせません..

このズームアウトは、同じコードでは発生しません。

  • jQuery Mobileを使用していません!!

  • 地図は、地図にマーカーを入力する検索ボタンと同じページにあります

どんな助けや指針も大歓迎です..

前もって感謝します..

よろしく、

阿中

4

2 に答える 2

0

コードに(別の)タイプミスがあります:

var resCoOrds = new google.maps.LatLng(results[i].geometry.location.lat(), results[i].geometry.location.lng;

する必要があります:

var resCoOrds = new google.maps.LatLng(results[i].geometry.location.lat(), results[i].geometry.location.lng());

results[i].geometry.locationすでにgoogle.maps.LatLngであるため、使用した方が簡単ですが、次のようになります。

var resCoOrds = results[i].geometry.location
于 2012-11-13T00:45:34.713 に答える
0

理解した...

これが私の解決策です。マップが既にロードされていて、マーカーの追加または呼び出しを開始するまでにアクティブなページに表示されている場合、ズームの問題は存在しないことに気付きましたmap.fitBounds()。そのため、マップのtilesloadedイベントを使用してマップの準備が整うまで待機し、マーカーを追加して境界に合わせました。

以下は私が使用したコードです...

function searchCallback(results, status) {
    if (status == google.maps.places.PlacesServiceStatus.OK) 
    {
        if (results.length) 
        {
            $.mobile.changePage("#mapview");
            google.maps.event.addListenerOnce(map, "tilesloaded", function()
            {
                var bounds = new google.maps.LatLngBounds();
                for ( var i = 0; i < results.length; i++) 
                {
                    /* code to add markers */
                    bounds.extend(results[i].geometry.location);
                }
                map.fitBounds(bounds);
            }   
        }
     }
 }

このアプローチは私の問題を解決しますが、誰かがより良い解決策を持っている場合は、私に知らせてください..

ありがとう..

于 2012-11-16T21:12:10.667 に答える