缩放时保持居中

在Google地图中,当我放大或缩小时,我希望能够将地图中心保留在我所在位置的标记上。 这是Ingress所做的事情,双击(或双击)或捏住的地方并不重要,地图仍然位于标记的中心。 所以有可能......

我现在想出的最好的是:

google.maps.event.addListener(mymap, 'zoom_changed', function() {
    mymap.setCenter({lat: myLoc.lat, lng: myLoc.lon});
})

但它远非完美,它只是在用户已经放大后重新映射地图。

非常感谢 !

[编辑]绝对没有什么帮助在API参考...或其他地方我是盲目的,错过了!


纯粹使用Javascript

  • 首先,您通过scrollwheel = false禁用谷歌地图默认的滚动缩放功能,
  • 接下来通过捕获鼠标事件创建自定义滚动缩放功能,并为谷歌地图设置缩放级别
  • 检查我的示例代码:Fiddle URL:https://jsfiddle.net/vh3gqop0/5/

    var map, i = 12;
    function initialize() {
    		var myLatlng = new google.maps.LatLng(46.769603, 23.589957);
    		var mapOptions = {
    			center: myLatlng,
    			zoom: i,
    			scrollwheel: false,
      		disableDoubleClickZoom: true,
    			mapTypeId: google.maps.MapTypeId.ROADMAP
    		};
    		map = new google.maps.Map(document.getElementById("map_canvas"),
    			mapOptions);
    
    		var marker = new google.maps.Marker({
    			position: myLatlng,
    			map: map,
    			title: 'Any Title'
    		});
    
    
    	}
    
    google.maps.event.addDomListener(window, 'load', initialize);
    
    $( document ).ready(function() {
        $('#map_canvas').on("wheel", function(evt){
       // console.log(evt.originalEvent.deltaY);
        		if(evt.originalEvent.deltaY > 0){
            	map.setZoom(++i);
            }else {
            	map.setZoom(--i);
            }
        		
        });
    });
    #map_canvas{
        height:400px;
        width:100%;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC9d3jaUX6Qdr0Uzvq6fQXVmZ1PBuHEVAQ"></script>
    <div id="map_canvas"></div>

    我不知道为什么你把这个问题标记为Javascript和Android。 在Android上,您需要将MapView包裹在另一个视图中,并检测onInterceptTouchEvent双击动作,如果您的类可以覆盖FrameLayout ,则可以覆盖它。 然后返回true以防止地图处理此事件,而您处理它。

    有关完整的代码,请在此处查看我的答案:https://stackoverflow.com/a/30118649/764897


    不幸的是Google Maps Api不提供这种行为。

    以下示例不需要jQuery,并且支持双击和鼠标滚动,但如果需要,您可以添加更多事件。

    在Codepen中查看

    禁用:

  • 双clickin
  • 滚动
  • 摇摄
  • 添加dblclickzoom_changed事件地图,然后在mousewheel在画布上的事件。

    我已经评论了该代码,希望这适用于你的情况。 请记住,您需要为所有浏览器和设备规范鼠标滚轮速度。 Hammer.js是一个很好的库。

    var map, zoom;
    
    function initialize() {
    
      // The white house!
      var myLatLng = new google.maps.LatLng(38.8977, -77.0365);
    
      // Default zoom level
      zoom = 17;
    
      // Keep a reference for evens
      var $map = document.getElementById("map");
    
      // Disable scrolling + double-click + dragging
      map = new google.maps.Map($map, {
        zoom: zoom,
        center: myLatLng,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        scrollwheel: false,
        disableDoubleClickZoom: true,
        //draggable: false
      });
    
      var marker = new google.maps.Marker({
        position: myLatLng,
        map: map
      });
    
    
      // EVENTS
    
      // Double Click: event zoom by 1
      map.addListener('dblclick', function(e) {
        zoomHandler(e.latLng, 1);
      });
    
      // Zoom changed: update current zoom level
      map.addListener('zoom_changed', function(e) {
        // Using a timeout because `getZoom()` does not return a promise.
        setTimeout(function() {
          zoom = map.getZoom();
        }, 50);
    
      });
    
      // Dom event: On mousewheel
      $map.addEventListener('mousewheel', wheelEvent, true);
    }
    
    // Mouse Scrolling event
    function wheelEvent(event) {
      if (event.deltaY > 1)
        zoomHandler(event, -1);
      else
        zoomHandler(event, 1);
    }
    
    // Zoom in/out
    function zoomHandler(event, zoomin) {
      zoom += zoomin;
      map.setZoom(zoom);
    }
    
    google.maps.event.addDomListener(window, 'load', initialize);
    #map {
      width: 100%;
      height: 240px;
    }
    <div id="map"></div>
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC9d3jaUX6Qdr0Uzvq6fQXVmZ1PBuHEVAQ"></script>
    链接地址: http://www.djcxy.com/p/81503.html

    上一篇: keep center when zooming

    下一篇: Custom marker color for default (dot) marker