Google Maps API V3: Offset panTo() by x pixels

后端 未结 3 1596
感情败类
感情败类 2020-12-08 12:11

I have a some UI elements on the right of my map (sometimes), and I\'d like to offset my panTo() calls (sometimes).

So I figured:

  1. get the original latl
3条回答
  •  不思量自难忘°
    2020-12-08 12:36

    Ok I found the answer here: How to call fromLatLngToDivPixel in Google Maps API V3?

    First create function/prototpe to access the map's projection (difficult in V3)

    //declare function/prototpe
    function CanvasProjectionOverlay() {}
    //define..
    CanvasProjectionOverlay.prototype = new google.maps.OverlayView();
    CanvasProjectionOverlay.prototype.constructor = CanvasProjectionOverlay;
    CanvasProjectionOverlay.prototype.onAdd = function(){};
    CanvasProjectionOverlay.prototype.draw = function(){};
    CanvasProjectionOverlay.prototype.onRemove = function(){};
    
    var gmap;
    var canvasProjectionOverlay;
    var PIXEL_OFFSET= 100;
    
    function showUluru(isOffset=false){
        //create map
        var gmap = new google.maps.Map($('#map_canvas', {});
        //create projection
        canvasProjectionOverlay = new CanvasProjectionOverlay();
        canvasProjectionOverlay.setMap(gmap);
        var uluruRock = new google.maps.LatLng(-25.335448,135.745076);
    
        if (isOffset)
                uluruRock  = getCentreOffset(uluruRock);
    
        gmap.panTo( uluruRock )
    }
    
    
    //Use this function on LatLng you want to PanTo();
    function getCentreOffset( alatlng ) {
        var proj = canvasProjectionOverlay.getProjection();
        var aPoint = proj.fromLatLngToContainerPixel(alatlng);
        aPoint.x=aPoint.x+PIXEL_OFFSET;
        return proj.fromContainerPixelToLatLng(aPoint);
    }
    

提交回复
热议问题