2010-09-06 202 views
1

这是我的代码:矩形范围内的随机标记?

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/

回答

6

你可能想尝试以下操作:

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

+0

@丹尼尔,我认为使用数学。 abs是不正确的,因为lat,lng有负数,看我的更新d。 – zjm1126 2010-09-06 02:29:26

+0

@ zjm1126:你说的对,没必要,因为北方总是比南方大,西方比东方大。修复我的答案。 – 2010-09-06 02:38:03

+0

你的第二个代码不会改变。 Math.abs – zjm1126 2010-09-06 02:53:06