2010-08-23 1 views
2

Je travaille sur un projet en javascript impliquant google maps.Trouver un ensemble de coordonnées dans une certaine plage de latitude et longitide

L'objectif est de trouver 16-20 coordonnées à moins de n kilomètres d'un ensemble de coordonnées de longitude de latitude, de sorte que les 16 points si connectés formeront un cercle autour des coordonnées d'origine.

L'objectif final est de faire en sorte que je puisse comprendre les coordonnées à tracer et se connecter sur google maps pour faire un cercle autour d'un ensemble donné de coordonnées.

Le code serait quelque chose comme:

var coordinates = Array(); 
function findCoordinates(lat, long, range) { 
} 
coordinates = findCoordinates(-20, 40, 3); 

Maintenant, pour que la magie se produit dans la fonction findCoordinates().

Répondre

7

Fondamentalement, ce que vous essayez de faire est de trouver N points sur le rayon d'un cercle à partir d'un point donné avec un rayon donné. Une façon simple de le faire est de diviser les 360 degrés d'un cercle en N morceaux égaux, et de trouver les points à intervalles réguliers.

qui suit devrait faire à peu près ce que vous êtes après -

function findCoordinates(lat, long, range) 
{ 
    // How many points do we want? (should probably be function param..) 
    var numberOfPoints = 16; 
    var degreesPerPoint = 360/numberOfPoints; 

    // Keep track of the angle from centre to radius 
    var currentAngle = 0; 

    // The points on the radius will be lat+x2, long+y2 
    var x2; 
    var y2; 
    // Track the points we generate to return at the end 
    var points = []; 

    for(var i=0; i < numberOfPoints; i++) 
    { 
     // X2 point will be cosine of angle * radius (range) 
     x2 = Math.cos(currentAngle) * range; 
     // Y2 point will be sin * range 
     y2 = Math.sin(currentAngle) * range; 

     // Assuming here you're using points for each x,y..    
     p = new Point(lat+x2, long+y2); 

     // save to our results array 
     points.push(p); 

     // Shift our angle around for the next point 
     currentAngle += degreesPerPoint; 
    } 
    // Return the points we've generated 
    return points; 
} 

Le tableau de points que vous obtenez en retour peut alors facilement être utilisé pour dessiner le cercle que vous souhaitez sur votre carte google.

Si votre objectif global consiste simplement à dessiner un cercle à un rayon fixe autour d'un point, une solution beaucoup plus simple consisterait à utiliser une surimpression. J'ai trouvé KMBox très facile à mettre en place - vous lui donnez un point central, un rayon et une superposition d'image (dans votre cas, un cercle transparent avec une ligne visible autour du bord) et il s'occupe de tout le reste, y compris le redimensionner sur le zoom avant/arrière.

+0

Merci beaucoup. C'est exactement ce que je cherchais. Je vais regarder dans KMBox et lui donner un coup de feu. – user396404

+0

Comment limiter la plage à xx KMs ou xx Miles? – Mrchief

+0

ConroyP, vous êtes un chef. C'est très utile. Est-ce que cela prend en compte la courbure de la terre comme le calcul de distance de la haversine? –

1

je devais trouver un code pour calculer les distances orthodromique un certain temps (juste Google « Great Circle » si vous ne savez pas de quoi je parle) et je trouve ce site:

http://williams.best.vwh.net/gccalc.htm

Vous pourriez être en mesure de créer votre propre code JavaScript pour faire vos calculs de latitude/longitude en utilisant le JavaScript de ce site comme référence. Il me semble que vous avez juste besoin de diviser les 360 degrés d'un cercle en un nombre égal de pièces et de tracer une ligne à une distance égale du centre à chaque «roulement». Une fois que vous connaissez le lat/lon à l'autre extrémité de chaque ligne de relèvement/distance, relier les points pour former un polygone est trivial.

Questions connexes