更新 2
var map, marker, overlay, latlng, zoom = 20;
function initialize() {
latlng = new google.maps.LatLng(33.501472920248354, -82.01948559679795);
var myOptions = {
zoom : zoom,
center : latlng,
tilt : 0,
mapTypeId : google.maps.MapTypeId.SATELLITE
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
overlay = new google.maps.OverlayView();
overlay.draw = function() {
};
overlay.onRemove = function() {
};
overlay.setMap(map);
marker = new google.maps.Marker({
position : latlng,
map : map,
draggable : true,
title : "Hello World!"
});
google.maps.event.addListener(map, 'zoom_changed', function() {
zoom = map.getZoom();
});
google.maps.event.addListener(map, 'dragend', function() {
overlay.setMap(map);
});
google.maps.event.addListener(marker, 'dragend', function(evt) {
var tilt = map.getTilt();
latlng = new google.maps.LatLng(evt.latLng.lat(), evt.latLng.lng());
if(tilt === 45) {
var projection = overlay.getProjection();
var latlng2pixel = projection.fromLatLngToContainerPixel(marker.getPosition());
var delta = 0;
switch(zoom) {
case 20:
delta = 45;
break;
case 19:
delta = 12;
break;
case 18:
delta = 4;
break;
}
latlng = projection.fromContainerPixelToLatLng(new google.maps.Point(latlng2pixel.x, (latlng2pixel.y + delta )));
}
});
google.maps.event.addListener(map, 'tilt_changed', function() {
var tilt = map.getTilt();
if(tilt === 45) {
var delta = 0;
switch(zoom) {
case 20:
delta = 65;
break;
case 19:
delta = 32;
break;
case 18:
delta = 16;
break;
}
var projection = overlay.getProjection();
var latlng2pixel = projection.fromLatLngToContainerPixel(marker.getPosition());
var pixel2latlng = projection.fromContainerPixelToLatLng(new google.maps.Point(latlng2pixel.x, (latlng2pixel.y - delta )));
marker.setPosition(pixel2latlng);
} else {
marker.setPosition(latlng);
}
});
}
注:
上記のコードは次のように機能します。
- カスタム オーバーレイを適用して使用します。
google.maps.MapCanvasProjection object
文書
- マーカーのピクセル単位の位置を見つけます。
y
( top = lng ) に 45 度 (ズーム 20 で 45 ピクセル) とマーカー アイコンの高さのピクセルを追加し20
ます (度数の変化は単純な目の錯覚であるため、x は常に変化しません ;) );
- それらのピクセル位置を有効な緯度位置に変換します。
- メソッドが からへ、またはその逆に
tilt
変更されるかどうかを観察し、それに応じて新しい座標を設定します。0
45