2011-07-29 14 views
15

Próbuję utworzyć losową długość i szerokości geograficzne. Muszę utworzyć liczby między -180.000 i +180.000. Więc mogę dostać 101.325 lub -3.546 lub -179.561.JavaScript - Jak utworzyć losową długość i szerokości geograficzne?

Czy możesz mi podać szybką formułę?

Dziękuję wszystkim za pomoc. Połączyłem kilka przykładów, aby dopasować się do moich potrzeb. Tak, mogę skrócić kod, ale to naprawdę pomaga zobaczyć, co się dzieje.

// LONGITUDE -180 to + 180 
function generateRandomLong() { 
    var num = (Math.random()*180).toFixed(3); 
    var posorneg = Math.floor(Math.random()); 
    if (posorneg == 0) { 
     num = num * -1; 
    } 
    return num; 
} 
// LATITUDE -90 to +90 
function generateRandomLat() { 
    var num = (Math.random()*90).toFixed(3); 
    var posorneg = Math.floor(Math.random()); 
    if (posorneg == 0) { 
     num = num * -1; 
    } 
    return num; 
} 
+0

bardzo podoba mi kilka odpowiedzi dostałem. Nie jestem też geniuszem matematycznym ani geniuszem JavaScript, więc naprawdę potrzebowałem dobrych przykładów do moich konkretnych celów. Opublikuję zmodyfikowany kod w ciągu sekundy. Dziękuję wszystkim, którzy odpowiedzieli na moje pytanie. –

Odpowiedz

44
function getRandomInRange(from, to, fixed) { 
    return (Math.random() * (to - from) + from).toFixed(fixed) * 1; 
    // .toFixed() returns string, so ' * 1' is a trick to convert to number 
} 

W twoim przypadku: getRandomInRange(-180, 180, 3):

12.693 
-164.602 
-7.076 
-37.286 
52.347 
-160.839 
+0

bardzo ładne rozwiązanie! –

+0

Tak, to naprawdę skuteczne rozwiązanie. Dzięki! –

+1

Właśnie tego szukam. Dzięki! "DotNet Ninja"? Wyglądasz jak "Ninja DotJavascript". – dbryson

5
Math.random()*360 - 180 

że będzie Ci szereg -180 do 180

A jeśli naprawdę chcą tylko 3 miejsc po przecinku

Math.round((Math.random()*360 - 180) * 1000)/1000 
+1

'.toFixed (3)' jest ładniejszym sposobem zaokrąglić liczbę do 3 miejsc po przecinku – Gareth

+0

@ Gareth eh ... muszą przekonwertować z powrotem na numer i to tylko obcina ... nie jest wielka sprawa, ale ja wolę prostą matematykę –

+0

To prawda, że ​​zapomniałem, że zwraca ciąg znaków. Ale robi to właściwie. – Gareth

0

To powinno działać

Math.random() * 360 - 180 
0

Oto funkcja, którą stworzyłem jest:

function Rand(x, y){ 
    //Returns a random number between 0 and X if Y is undefined 
    //Returns a random number between X and Y if Y is defined 

    return x+(Math.random()*(y-x)) || Math.random()*x; 
} 

Działa to z liczbami całkowitymi i paskami.

1
function generateRandomLatLng() 
{ 
    var num = Math.random()*180; 
    var posorneg = Math.floor(Math.random()); 
    if (posorneg == 0) 
    { 
     num = num * -1; 
    } 
    return num; 
} 
+0

Bardzo spodobało mi się twoje rozwiązanie. Uświadomiłem sobie, że długość i szerokość geograficzna mają różne zakresy, nie tylko -180 do +180, więc musiałem zmodyfikować moje pytanie i - koniecznie - odpowiedź. Dzięki! –

Powiązane problemy