2010-08-13 5 views
37

Ich frage mich, ob es möglich ist, Offset das Zentrum einer Karte in Google Maps API v3. Ich möchte diesen Offset in Pixel kontrollieren, da lat und lng falsch und sehr schwer vorherzusagen scheint.Wie versetze ich den Mittelpunkt eines Google Maps (API v3) in Pixel?

Ich muss nur eine Markierung platzieren und dann die Mitte um 250px versetzen, damit ich etwas anderen Inhalt in der Mitte der Karte platzieren kann.

Hoffe jemand kann helfen!

Antwort

57

diese Frage bei der Erforschung und dachte, sollte ich eine Antwort geben:

function map_recenter(latlng,offsetx,offsety) { 
    var point1 = map.getProjection().fromLatLngToPoint(
     (latlng instanceof google.maps.LatLng) ? latlng : map.getCenter() 
    ); 
    var point2 = new google.maps.Point(
     ((typeof(offsetx) == 'number' ? offsetx : 0)/Math.pow(2, map.getZoom())) || 0, 
     ((typeof(offsety) == 'number' ? offsety : 0)/Math.pow(2, map.getZoom())) || 0 
    ); 
    map.setCenter(map.getProjection().fromPointToLatLng(new google.maps.Point(
     point1.x - point2.x, 
     point1.y + point2.y 
    ))); 
} 

Wenn Ihr Google Maps Variable nicht map ist verwenden Sie die folgende Aufruf Funktionsreferenz:

function map_recenter(map,latlng,offsetx,offsety) { ... 
+3

Schöne Lösung !!! Arbeitete so sauber !!!! – TruMan1

+0

Ich verwende es auf onMarkerClick(). Wenn ich über ein Mark klicke funktioniert perfekt, aber wenn ich die Markierung (aus Code) mit google.maps.event.trigger fire (thisMark, 'click'); nicht funktionieren ... aber nichts (ich kann damit leben) ... Es ist die beste Lösung, Offset zu tun. Vielen Dank!!! – Equiman

+0

Schöne und elegante Lösung. – ChrisRich

3

gibt es auch die Die Methode panBy des Kartenobjekts ... kann um eine angegebene Anzahl von Pixeln versetzt werden. Sie erhalten jedoch eine sanfte Übergangsanimation, die möglicherweise nicht Ihren Vorstellungen entspricht. Ich suche selbst das Gleiche, werde dich wissen lassen, was ich finde.

+1

yep, 'map.panBy (0, -10)' um es per 10px zu bewegen –

23

dazu finden Frage: How to offset the center of a Google maps (API v3) in pixels?

Dies ist eine Modifikation einer Antwort, die ich here zur Verfügung gestellt habe.

google.maps.Map.prototype.setCenterWithOffset= function(latlng, offsetX, offsetY) { 
    var map = this; 
    var ov = new google.maps.OverlayView(); 
    ov.onAdd = function() { 
     var proj = this.getProjection(); 
     var aPoint = proj.fromLatLngToContainerPixel(latlng); 
     aPoint.x = aPoint.x+offsetX; 
     aPoint.y = aPoint.y+offsetY; 
     map.setCenter(proj.fromContainerPixelToLatLng(aPoint)); 
    }; 
    ov.draw = function() {}; 
    ov.setMap(this); 
}; 

Anschließend können Sie es wie so verwenden:

var latlng = new google.maps.LatLng(-34.397, 150.644); 
var map = new google.maps.Map(document.getElementById("map_canvas"), { 
    zoom: 8, 
    mapTypeId: google.maps.MapTypeId.ROADMAP, 
    center: latlng 
}); 

map.setCenterWithOffset(latlng, 0, 250); 

Hier ist ein funktionierendes example.

+2

+1 für die Erweiterung der Map-Klasse – BenLanc

+0

schön - ein Leckerbissen gearbeitet - danke! –

+0

Funktioniert wie ein Charme. Vielen Dank! – ebiv