简体   繁体   English

缩小Google地图事件?

[英]Zoom out event for google maps?

I'm trying to maintain a constant set of sample markers on my maps for easy viewing. 我正在尝试在地图上维护一组恒定的样本标记,以便于查看。 I populate my maps with a random selection of markers from the database up to a certain number during pan and zoom. 在平移和缩放过程中,我从数据库中随机选择了标记,并填充了一定数量的标记来填充地图。 The main problem is to replace markers falling out-of-bounds with new markers in-bounds. 主要问题是用超出范围的新标记替换超出范围的标记。

The code below works quite well except for zooming out. 下面的代码除了缩小外,效果很好。 As I zoom out I want to repeatedly refresh the map with a new set of random markers, up to a certain number and spread evenly over the map. 缩小时,我想用一组新的随机标记重复刷新地图,直到达到一定数量并均匀分布在地图上。 The problem is there is a zoom_changed event but it doesn't seem to distinguish between in and out. 问题在于存在zoom_changed事件,但似乎无法区分输入和输出。

Any suggestions? 有什么建议么?

  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); } } } }); }); 

The php: - 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 change event google map 缩放更改事件Google地图

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

read more here 在这里阅读更多

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

If there is no built-in function, make one. 如果没有内置功能,请制作一个。 Try the following method: 请尝试以下方法:

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

});

Thanks, I achieved it as below ('if(zoomDiff < 0)'). 谢谢,我实现了如下('if(zoomDiff <0)')。 However, there is something intermittent about the placement of the markers. 但是,标记的位置有些断断续续。 The data is being returned by the php but sometimes it isn't loaded onto the map. 数据由php返回,但有时未加载到地图上。 Any clues about what might be mis-timing? 关于什么可能是错误的时机的任何线索?

  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); } }); }); } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM