1

私はしばらくの間これに取り組んできましたが、それを理解することはできません. V2 から V3 に取り込もうとしている Google マップ コードがあります。すべてが機能していますが、通常の情報ウィンドウを置き換えるオーバーレイがあります。この行:

$("#infoCallout").appendTo(map.getPane(G_MAP_FLOAT_SHADOW_PANE));

V3 では機能しなくなりました。$("#infoCallout") は非表示の div です。現在、オーバーレイは左上にのみ表示されています...

ここで私がこれまでに持っているものを参照してください: http://empulseforum.com/brammoMapV3.php

ここでV2で問題なく動作します:http://brammoforum.com/brammo-owners-map.php

簡単なものが欠けていると感じます。

前もって感謝します!

4

2 に答える 2

1

最初に、あなたのリンクで新しいサイトを表示すると、ページがスローされます: Uncaught ReferenceError: markerOffset is not defined at line 73, which is (reformatted):

$("#infoCallout").fadeIn('slow').css({
    top:  markerOffset.y + -107,
    left: markerOffset.x - 40 });

markerOffset前の行 (72 行目) のコードがコメント アウトされているため、このコードは定義されていません。

//var markerOffset = map.fromLatLngToDivPixel(markers.getPosition());

そのため、72 行目のコードのコメントを外し、v3 API を介して機能するようにリファクタリングする必要があります。

  1. 内部呼び出し: markers.getPosition()v3 でも有効です。ここまでは順調ですね
  2. 外側の呼び出し: map.fromLatLngToDivPixel()v3 にはもう存在しません。これと関連する呼び出しはクラスに移動されました: google.maps.MapCanvasProjection. プロジェクションは、次を呼び出すことで到達できますOverlayView.getProjection()

まとめると、displayPoint関数内のコードを次のように変更することをお勧めします。

function displayPoint( markers, index ) {
    map.panTo( markers.getPosition() );
    $("#infoCallout").hide();
    updateMemberInfo( pic[index], dN[index], bID[index], cS[index] );

    // Next 2 lines are new and replace the old line of code:
    var prjctn = overlay.getProjection();        
    var markerOffset = prjctn.fromLatLngToDivPixel( markers.getPosition() );

    $( "#infoCallout" ).fadeIn( 'slow' ).css({
        top:  markerOffset.y + -107,
        left: markerOffset.x -40
    });
}

明らかに、このコードはテストされていないため、デバッグを行う必要があるかもしれませんが、このコードが正しい方向に進むことを願っています.

于 2012-05-04T03:49:59.410 に答える
0

OverlayViewのメソッドを使用しfromLatLngToContainerPixelます。

于 2012-05-03T18:16:07.720 に答える