5

マップのdiv内の固定ピクセル位置にマーカーを配置する必要があります。マーカーをインスタンス化するには、LatLngが必要です。 fromDivPixelToLatLng()はピクセル座標をLatLngに変換する方法ですが、一貫して動作するようにはできません。Google Maps API V3 fromDivPixelToLatLngに一貫性がありません

http://www.pinksy.co.uk/newsquare/overlaytest.htmlに問題の簡単な例を掲載しました。地図をクリックして、マーカーを200px/200pxに配置します。地図をドラッグしてもう一度クリックします。私は毎回200px/200pxにマーカーを置くことを期待していましたが、そうではありません。

まず私が600PX 300ピクセルによってdivの中に、いつものようにマップを設定します。

var london = new google.maps.LatLng(51.501904,-0.130463); 
var mapOptions = { 
    zoom: 15, 
    center: london, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 

その後、私はオーバーレイを作成します。

var overlay = new google.maps.OverlayView(); 
overlay.draw = function() {}; 
overlay.setMap(map); 

fromDivPixelToLatLngを(テストするために)、私は、クリックを作成しますマップ上のイベントで、ピクセル位置200px/200pxにマーカーを配置しようとします。しかし、周辺の地図をドラッグ

google.maps.event.addListener(map, 'click', function(event) { 

    var pixelLatLng = overlay.getProjection().fromDivPixelToLatLng(new google.maps.Point(200,200)); 

    var marker = new google.maps.Marker({ 
     position: pixelLatLng, 
     map: map 
    }); 
}); 

、あなたは/マーカーが常に200pxのに配置されていないことがわかります:関係なく、あなたが地図をドラッグところの、私は常に200pxの/ 200pxのに配置するマーカーを期待していました200px何か案は?

ありがとうございます!

答えて

3

実験の後、fromContainerPixelToLatLng()が私が探しているものであることがわかりました。他の人の利益のために、私はhttp://www.pinksy.co.uk/newsquare/overlaytest2.htmlに例を掲載しました。

(!記録のために、私はfromDivPixelToLatLngはそれがないように動作する理由はまだわからないんだけど、気にしない)

+0

に下で良好な説明があります: https://groups.google.com/forum/#!topic/google-maps-api/L2UJJ​​p10VRw – kaskader

3

下のデモを確認します。この上でいくつかのより多くの実験のために http://jsbin.com/otidih/51。 ロギングを開始するにはコンソールを起動します。ほとんどのものはログに記録されています。短いバージョン以下このgroups post. から

詳細説明:

ContainerPixelは、地図のコンテナに対して計算されます。地図をパンすると、ContainerPixelLatLngsに変更されます。 ContainerPixelマップ(浮動小数点数)で移動しないものは変更されません。あなたがマップのサイズを変更しない場合、例えば は、mapCenterContainerPixelは同じまま:

overlay.getProjection().fromLatLngToContainerPixel(map.getCenter()) 

のための全体tilespaceを保持している巨大な本部へDivPixelが計算され、相対現在のズームレベルでのワールドあなたがズームレベルと移動(パン)マップを変更しない場合

overlay.getProjection().fromLatLngToDivPixel(point) 

、その後、マップを移動何のDivPixelは同じままになります。たとえば、地図上のある都市のDivPixelは、地図を移動しても同じままです。ズームレベルを変更したり、国際的なデータラインを越えた場合にのみ変更されます。

は、あなたが戻って同じズームレベルに来ても、同じ緯度経度が異なるDivPixel値を持つことができますので、DivPixelを計算するために使用される実際の基準点は、マップをズームするたび をリセットし得ることに注意してください。また、考慮すべき

ポイント値はありません(それは常に同じまま大きなポイント面に緯度経度のシリンダーから変換

API Reference に説明されて
map.getProjection().fromLatLngToPoint() 

から返されますズームレベル)。 LatLngsは常に同じPointにマップされます。

(0,0)点である(85.0511287798066、-180)緯度経度 - どこのGoogleマップカット(あなたは理由を知りたい場合は、Mercator projectionについて読む)

+0

これが選択された回答である必要があります。 –

関連する問題