2010-08-21 171 views
8

由于某些原因,谷歌地图v3的getBounds()功能似乎比地图实际显示的功能延伸得更远。纠正我,如果我错了,但不应该返回当前视图中显示内容的角落的NE(右上角)和SW(左下角)纬度和经度坐标?谷歌地图v3 getBounds超出地图上可见的范围

我返回了这些坐标之间的搜索结果(由lat和lng映射),并返回的结果远远超出getBounds()返回的区域之外。任何有关可能会发生什么的想法?

仅供参考,我得到的边界在地图上的闲置事件:

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

var bounds = map.getBounds(); 
var NE = bounds.getNorthEast(); 
var SW = bounds.getSouthWest(); 

...和使用.lat()和.lng(),以获得来自各个角落的坐标。然后,我将它提供给一个SQL查询来检查这些坐标之间的结果。结果在一般地区,但可能远远超出地图上实际显示的范围。

任何想法感谢!谢谢!

+0

注意:这实际上是由于某些标记正在显示/未显示并且与错误的搜索结果关联时出现更深的错误。谷歌当然正在返回正确的结果。 – Ryan 2010-08-21 20:11:10

回答

17

正确,map.getBounds()将返回可视区域的边界,如下例所示。在此示例中,当idle事件触发时,将使用map.getBounds()的点绘制红色的Polyline框。

您的SQL查询可能不会返回您正在查找的结果,并且可能需要再次查看。

<!DOCTYPE html> 
<html> 
<head> 
<title>Bounds Box</title> 
<script type="text/javascript" 
    src="http://maps.google.com/maps/api/js?sensor=false"> 
</script> 
<script type="text/javascript"> 
     function initialize() { 

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

     google.maps.event.addListener(map, 'idle', function(event) { 
      var bounds = map.getBounds(); 

      var ne = bounds.getNorthEast(); 
      var sw = bounds.getSouthWest(); 

      var viewportPoints = [ 
       ne, new google.maps.LatLng(ne.lat(), sw.lng()), 
       sw, new google.maps.LatLng(sw.lat(), ne.lng()), ne 
      ]; 
      /*strokeOpacity = 0 , if don't want to show the border moving. */ 
      if (viewportBox) { 
       viewportBox.setPath(viewportPoints); 
      } else { 
       viewportBox = new google.maps.Polyline({ 
        path: viewportPoints, 
        strokeColor: '#FF0000', 
        strokeOpacity: 1.0, 
        strokeWeight: 4 
       }); 
       viewportBox.setMap(map); 
      }; 

      var info = document.getElementById('info'); 
      info.innerHTML = 'NorthEast: ' + ne.lat() + ' ' + ne.lng() + 
       '<br />' + 'SouthWest: ' + sw.lat() + ' ' + sw.lng(); 
     }); 
     }; 
</script> 
</head> 
<body onload="initialize()"> 
    <div id="map_canvas" style="width:500px; height:500px"></div> 
    <div id="info"></div> 
</body> 
</html> 
+1

是的,这实际上是一个不同的标记错误,让我混淆起来。很好的演示,以显示界限,谢谢。 – Ryan 2010-08-21 20:11:49

+0

+1良好的答案@Eric :) – 2010-08-22 03:05:34

+0

@Ryan您是否发现了标记的错误?我有同样的问题! – 2015-07-16 14:53:23