2010-07-23 32 views
15

Tôi đã tìm thấy một số ví dụ về cách xoay bản đồ trong khi một điểm đánh dấu đang được kéo. Ví dụ: http://www.putyourlightson.net/projects/coordinatesTrong Google Maps V3, làm cách nào tôi có thể nhận được điểm đánh dấu có thể kéo để xoay bản đồ?

// create map and add controls 
var map = new GMap2(document.getElementById("map")); 
map.addControl(new GLargeMapControl());   
map.addControl(new GMapTypeControl()); 

// set centre point of map 
var centrePoint = new GLatLng('53.34870686020199', '-6.267356872558594'); 
map.setCenter(centrePoint, 14); 

// add a draggable marker 
var marker = new GMarker(centrePoint, {draggable: true}); 
map.addOverlay(marker); 

// add a drag listener to the map 
GEvent.addListener(marker, "dragend", function() { 
    var point = marker.getPoint(); 
    map.panTo(point); 
    document.getElementById("latitude").value = point.lat(); 
    document.getElementById("longitude").value = point.lng(); 
}); 

Trang này có vẻ như "tự động xoay" trong khi điểm đánh dấu đang được kéo; lưu ý rằng trình xử lý sự kiện duy nhất của nó là dành cho "kéo". Nhưng tôi đảm bảo với bạn rằng bản đồ đó sẽ quét trong khi điểm đánh dấu đang được kéo.

Tôi đang cố gắng đạt được điều tương tự với API V3, không thành công. Tôi thậm chí đã thử gọi map.panTo() trong khi biểu tượng đang được kéo, với kết quả không thỏa mãn: http://www.publicgloucester.com/test.html

function initialize() 
    { 
    Gloucester = new google.maps.LatLng (42.6159285, -70.6619888); 

    myOptions = 
     { 
     zoom: 14, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     center: Gloucester, 
     streetViewControl: false 
     } 

    map = new google.maps.Map (document.getElementById ("map_canvas"), myOptions); 

    marker = new google.maps.Marker ({position: Gloucester, title: "Gloucester, MA"}); 
    marker.setMap (map); 
    marker.setDraggable (true); 

    google.maps.event.addListener (marker, 'drag', function (event) 
     { 
     // Pan to this position (doesn't work!) 
     map.panTo (marker.getPosition()); 
     }); 

    } 

Nó làm cho ý nghĩa với tôi rằng điều này sẽ không làm việc, kể từ khi panning để đặt điểm đánh dấu ở trung tâm của bản đồ, trong khi bản đồ đang chuyển động, là không có thật.

Đơn giản như API V2 thực hiện việc này tự động, trong khi API V3 thì không? Làm thế nào tôi có thể đạt được hiệu ứng này với API V3?

Cảm ơn.

+0

Tôi đã tìm hiểu và có vẻ như tính năng này đã bị xóa trong quá trình chuyển đổi V2 -> V3. Tôi không thể tìm thấy bất kỳ từ chính thức nào, nhưng đó dường như là những gì đã xảy ra. Rất tiếc. –

+0

FYI - http://code.google.com/p/gmaps-api-issues/issues/detail?id=2404 –

Trả lời

19

sử dụng kéo thay vì kéo. mã sẽ được,

google.maps.event.addListener(marker, "dragend", function(event) { 

     var point = marker.getPosition(); 
     map.panTo(point); 

     }); 
+0

Mã này "hoạt động", nhưng không đạt được những gì tôi muốn. Mã này sẽ quét bản đồ khi điểm đánh dấu được nhả ra. Tôi muốn bản đồ xoay trong khi nhà sản xuất phát hành, cũng như hành vi tự động trong API v2. Tôi đã đăng ví dụ của bạn tại http://www.publicgloucester.com/test2.html –

1

Sự kiện bạn muốn nghe là một trong những sử dụng trong ví dụ của bạn "kéo", những gì bạn có thể làm để làm cho nó trông ít "giả mạo" là thêm một sự chậm trễ, vì vậy các bản đồ sau điểm đánh dấu thay vì được cập nhật ngay lập tức. Hãy thử điều này:

google.maps.event.addListener(marker, "drag", function(event) { 
    var point = marker.getPosition(); 
    window.setTimeout(function(){ 
    map.panTo(point); 
    }, 100); 
}); 
+0

Điều này có cùng vấn đề với mã gốc của tôi; các điểm đánh dấu và tay phân kỳ, và nó không pan đúng cách. Nói cách khác, điểm đánh dấu không tự động xoay bản đồ giống như nó được sử dụng thành v2, điều này sẽ bốc mùi. Cảm ơn! –

+0

Tôi đã thực hiện một số nghiên cứu và thuộc tính 'dragCrossMove' đã được gỡ bỏ hiệu quả trong v3, không có thay thế hiện tại. Tùy chọn bouncy dường như cũng biến mất. – xmarcos

Các vấn đề liên quan