【问题标题】:Zoom out event for google maps?缩小谷歌地图的活动?
【发布时间】:2014-08-30 10:11:39
【问题描述】:

我试图在我的地图上保持一组不变的示例标记以便于查看。在平移和缩放期间,我使用从数据库中随机选择的标记填充我的地图,直到达到一定数量。主要问题是用新的界内标记替换掉界外的标记。

除了缩小之外,下面的代码运行良好。 当我缩小时,我想用一组新的随机标记重复刷新地图,最多达到一定数量并均匀分布在地图上。问题是有一个 zoom_changed 事件,但它似乎无法区分进出。

有什么建议吗?

      google.maps.event.addListener(map, 'idle', function() {
            bounds = map.getBounds();
            var southWest = bounds.getSouthWest();
            var northEast = bounds.getNorthEast();
            var north = northEast.lat();
            var south = southWest.lat();
            var west = southWest.lng();
            var east = northEast.lat();
            var marnum = 20;
            $.post('pzparsers/pzparsers.php', {north:north, south:south, west:west, east:east, marnum:marnum}, function(response){
                eval(response);
                bounds = map.getBounds();
                if(oldmarkers.length == 0 && newmarkers.length !== 0){
                    //b = $.extend( true, {}, a );
                    for (var i = 0; i < newmarkers.length; i++) {
                        oldmarkers[i] = newmarkers[i];
                        oldmarkers[i].setMap(map);
                    }
                } else if (oldmarkers.length !== 0 && newmarkers.length !== 0){
                    for (var i = 0; i < oldmarkers.length; i++){
                        if(!bounds.contains(oldmarkers[i].getPosition())){
                            oldmarkers[i].setMap(null);
                            oldmarkers[i] = newmarkers[i];
                            oldmarkers[i].setMap(map);
                        }
                    }
                }                       
            }); 
        });

php:-

  $output .= "newmarkers.length = 0;\n";
    if($mrk_cnt > 0){
        for ($lcnt = 0; $lcnt < $mrk_cnt; $lcnt++){
            $output .= "var point = new google.maps.LatLng($lat[$lcnt], $lng[$lcnt]);\n";
            $output .= "var mrktx = \"$inf[$lcnt]\";\n";
            $output .= "var infowindow = new google.maps.InfoWindow({ content: mrktx });\n";
            $output .= "var marker = new google.maps.Marker({position: point, icon: $icon[$lcnt], title: '$inf[$lcnt]  $begin[$lcnt] - $end[$lcnt]'});\n";
            $output .= "google.maps.event.addListener(marker,'click', function() {infowindow.open(map,marker);});\n";
            //$output .= "marker.setMap(map);\n";       
            $output .= "newmarkers.push(marker);\n";
        }
    }

【问题讨论】:

  • zoom_changed 事件:使用map.getZoom() 可以获得当前缩放值的信息,并与之前保存的值进行比较。
  • 谢谢,我会继续努力的。

标签: javascript google-maps zooming google-maps-markers


【解决方案1】:

如果没有内置函数,就做一个。试试下面的方法:

var mapzoom;

function initialize()
{

    //first get the zoom value of the map in initialize function
    mapzoom=map.getZoom();
}

google.maps.event.addListener(map, 'zoom_changed', function() {

    var zoomLevel = map.getZoom();

    if(mapzoom> zoomLevel)
    {
        //means zoom out do your code here

    }

    mapzoom=map.getZoom(); //to stored the current zoom level of the map

});

【讨论】:

    【解决方案2】:

    缩放改变事件谷歌地图

    google.maps.event.addListener(map, 'zoom_changed', function() {
        var zoomLevel = map.getZoom();
        map.setCenter(myLatLng);
        infowindow.setContent('Zoom: ' + zoomLevel);
    });
    

    在这里阅读更多

    https://developers.google.com/maps/documentation/javascript/events

    【讨论】:

      【解决方案3】:

      谢谢,我实现了如下('if(zoomDiff

            function pan_zoom(){
                  google.maps.event.addListener(map, 'idle', function() {
                      bounds = map.getBounds();
                      var southWest = bounds.getSouthWest();
                      var northEast = bounds.getNorthEast();
                      var north = northEast.lat();
                      var south = southWest.lat();
                      var west = southWest.lng();
                      var east = northEast.lng();
                      var marnum = 3;
                      newZoom = map.getZoom();
                      zoomDiff = newZoom - oldZoom;
                      oldZoom = newZoom;
                      if(zoomDiff < 0){
                          for(var index in oldmarkers) {
                              oldmarkers[index].setMap(null);
                              delete oldmarkers[index];
                          }
                          var fetchsize = marnum;
                      } else {
                          for(var index in oldmarkers) {
                              if(!bounds.contains(oldmarkers[index].getPosition())){
                                  oldmarkers[index].setMap(null);
                                  delete oldmarkers[index];
                              }
                          }
                          oldsize = Object.size(oldmarkers);
                          var fetchsize = marnum - oldsize;
                      }
                      $.post('pzparsers/pzparsers.php', {north:north, south:south, west:west, east:east, fetchsize:fetchsize}, function(response){
                          document.getElementById('search_results').innerHTML = north+' '+south+' '+west+' '+east;
                          document.getElementById('search_results').innerHTML += response;
                          eval(response);
                          for(var index in newmarkers) {
                              oldmarkers[index] = newmarkers[index];
                              oldmarkers[index].setMap(map);
                          }           
                      }); 
                  });
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        • 2019-09-21
        • 2014-03-21
        • 2018-07-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多