2010-09-06 2 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 имеет отрицательное число, посмотрите мое обновление д. – zjm1126

+0

@ zjm1126: Вы правы, это не обязательно, так как Север всегда будет больше Юга, а Запад больше, чем Восток. Исправление моего ответа. –

+0

Ваш второй код не изменяется. также имеет Math.abs – zjm1126

Смежные вопросы