矩形边界内的随机标记?

时间:2010-09-06 01:49:58

标签: javascript google-maps random

这是我的代码:

function getRandom_marker(bounds) {
  var leftBottom=[bounds.getSouthWest().lat(),bounds.getSouthWest().lng()]
  var rightTop=[bounds.getNorthEast().lat(),bounds.getNorthEast().lng()]
  var latlng=[leftBottom[0]+Math.floor(Math.random() * (rightTop[0]-leftBottom[0])),
    leftBottom[1]+Math.floor(Math.random() * (rightTop[1]-leftBottom[1]))]
  return latlng
 }

我使用此代码生成随机数,但有时候,标记不在地图范围内,

那么,我的代码出了什么问题?

感谢

更新

这是代码有Math.abs:

http://jsfiddle.net/PNYCf/1/

这不是:

http://jsfiddle.net/pRjBr/

1 个答案:

答案 0 :(得分:7)

您可能需要尝试以下操作:

function getRandom_marker(bounds) {
  var lat_min = bounds.getSouthWest().lat(),
      lat_range = bounds.getNorthEast().lat() - lat_min,
      lng_min = bounds.getSouthWest().lng(),
      lng_range = bounds.getNorthEast().lng() - lng_min;

  return new google.maps.LatLng(lat_min + (Math.random() * lat_range), 
                                lng_min + (Math.random() * lng_range));
}

完整示例:

<!DOCTYPE html>
<html> 
<head> 
   <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
   <title>Google Maps Random Points Demo</title> 
   <script src="http://maps.google.com/maps/api/js?sensor=false" 
           type="text/javascript"></script> 
</head> 
<body> 
   <div id="map" style="width: 400px; height: 300px;"></div> 

   <script type="text/javascript"> 

   function getRandom_marker(bounds) {
     var lat_min = bounds.getSouthWest().lat(),
         lat_range = bounds.getNorthEast().lat() - lat_min,
         lng_min = bounds.getSouthWest().lng(),
         lng_range = bounds.getNorthEast().lng() - lng_min;

     return new google.maps.LatLng(lat_min + (Math.random() * lat_range), 
                                   lng_min + (Math.random() * lng_range));
   }

   var map = new google.maps.Map(document.getElementById('map'), {
     zoom: 8,
     center: new google.maps.LatLng(-34.397, 150.644),
     mapTypeId: google.maps.MapTypeId.ROADMAP
   });

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

     for (var i = 0; i < 20; i++) {
       new google.maps.Marker({
         position: getRandom_marker(mapBounds), 
         map: map
       });   
     }
   });

   </script> 
</body> 

截图:

Random Markers