2012-03-06 27 views
10

scroll gmapsGoogle Maps: Bản đồ cuộn theo chương trình của x pixel

Có một cách đơn giản để di chuyển bản đồ google lập trình của x pixel?

tôi chỉ có thể nghĩ rằng sử dụng setCenter, nhưng vấn đề là tôi sẽ phải tính toán vị trí mới (lat/lng) tùy thuộc vào mức độ phóng ...

bạn có thể nghĩ ra cái gì khác? Nói với tôi rằng điều đó là không thể với Google Map API là một câu trả lời hợp lệ nếu bạn khá chắc chắn về nó.

ps: Tôi đang sử dụng Gmaps4rails, vì vậy nếu bạn có thể nghĩ ra một cách để làm điều đó với đá quý, nó sẽ được mát mẻ. (như điều chỉnh các giới hạn cho một tập hợp con của bản đồ.) Bởi vì cuối cùng, mục tiêu của tôi là ngăn chặn trình đơn ẩn giấu một số dấu. Tôi sẽ cần phải thay đổi chế độ xem của bản đồ, nếu điều đó có ý nghĩa, sao cho nó phù hợp với các điểm đánh dấu vào khu vực màu da cam, không phải bản đồ đầy đủ.

fit markers


Giải pháp:

@Shane tốt nhất, tuyệt vời, ý tưởng hoạt động hoàn hảo, nhưng tôi nghĩ rằng giải pháp của bạn là dành cho API v2 Google, phải không? Đây là cách tôi đã làm điều đó cho V3:

var point = map.getCenter(); 

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

var projection = overlay.getProjection(); 

var pixelpoint = projection.fromLatLngToDivPixel(point); 
pixelpoint.x += my_value; # or .y 

point = projection.fromDivPixelToLatLng(pixelpoint); 

map.setCenter(point); 

Nếu ai biết về giải pháp tốt hơn với API v3, hãy cho chúng tôi biết về điều đó.

Trả lời

12

Hãy nhìn vào các đối tượng chiếu: http://code.google.com/apis/maps/documentation/javascript/reference.html#Projection

Trước tiên, bạn sẽ cần phải nhận được trung tâm của bản đồ.

var point = map.getCenter(); 

Chuyển đổi giá trị sang giá trị điểm.

var pixelpoint = projection.fromLatLngToPoint(point); 

Thêm giá trị của bạn vào giá trị điểm.

pixelpoint.x = pixelpoint.x + yourvalue; 
//or 
pixelpoint.y = pixelpoint.y + yourvalue; 

Chuyển đổi trở lại latLng.

var newpoint = projection.fromPointToLatLng(pixelpoint); 

Đặt trung tâm mới bằng giá trị mới.

map.setCenter(newpoint); 

Tôi chưa thử nghiệm ở trên nhưng nó sẽ hoạt động.

+0

Tôi sẽ thử điều này, cảm ơn. – Robin

+0

Từ khi xem ảnh của bạn và cố gắng hiểu rõ hơn về vấn đề của bạn. Bạn có thể tốt hơn với fitbounds. http://stackoverflow.com/a/2496558/787921 –

+0

Vâng ... các giới hạn được xác định bởi các điểm đánh dấu của tôi. Nó luôn luôn giống nhau cho một tập hợp các điểm đánh dấu nhất định.Những gì tôi không thể quản lý, về cơ bản là sửa đổi khung nhìn của bản đồ, để loại trừ phần trên cùng, trong đó trình đơn là, để phương thức fitBounds của bản đồ có thể thực hiện công việc theo cách tôi muốn. (vì tôi đã sử dụng fitBounds để bắt đầu, nhưng một số dấu có thể bị ẩn bởi trình đơn). – Robin

3

Tôi tin rằng bạn đang tìm kiếm này:

var panListener = google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) { 
        map.panBy(0,-90); 
       }); 

setTimeout(function() { 
    google.maps.event.removeListener(panListener) 
}, 2000); 

Trong trường hợp này, nó di chuyển bản đồ phía nam bởi 90px.

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