Я заглянул в Google Maps API, и кажется, что мой ответ был действительно неправильным.Я не заметил, что latLng работает не с длиной, а с широтой и долготой (похоже, я забыл, что земля не плоская :)).Используя этот хороший веб-сайт, я смог найти лучшее решение:
var position = new google.maps.LatLng(51.517289, -0.130463);
var latlngs = [];
var map;
// distance from position in km
var d = 5;
// Earth radius
var R = 6372;
function initialize()
{
var mapOptions = { zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: position };
map = new google.maps.Map(document.getElementById("map_canvas"),
mapOptions);
}
function dropMarkers()
{
var lat1Deg = position.lat();
var lon1Deg = position.lng();
var lat1Rad = lat1Deg.toRad();
var lon1Rad = lon1Deg.toRad();
latlngs.push(new google.maps.Marker({
position: position,
map: map,
draggable: false,
animation: google.maps.Animation.DROP}));
for (var brngDeg = 0; brngDeg < 360; brngDeg+=20)
{
brngRad = brngDeg.toRad();
var lat2Rad = Math.asin( Math.sin(lat1Rad)*Math.cos(d/R) +
Math.cos(lat1Rad)*Math.sin(d/R)*Math.cos(brngRad) );
var lon2Rad = lon1Rad +
Math.atan2(Math.sin(brngRad)*Math.sin(d/R)*Math.cos(lat1Rad),
Math.cos(d/R)-Math.sin(lat1Rad)*Math.sin(lat2Rad));
lat2Deg = lat2Rad.toDeg();
lon2Deg = lon2Rad.toDeg();
latlngs.push(new google.maps.Marker({
position: new google.maps.LatLng(lat2Deg,lon2Deg),
map: map,
draggable: false,
animation: google.maps.Animation.DROP}));
}
}
if (typeof(Number.prototype.toRad) === "undefined")
{
Number.prototype.toRad = function()
{
return this * Math.PI / 180;
}
}
if (typeof(Number.prototype.toDeg) === "undefined")
{
Number.prototype.toDeg = function()
{
return this * 180 / Math.PI;
}
}