我正在开发一个涉及谷歌地图的JavaScript项目.
目标是在一组纬度经度坐标的n公里内找出16-20个坐标点,使得如果连接的16个点将围绕原始坐标形成圆.
最终的目标是使它能够找到坐标以绘制和连接谷歌地图,以围绕给定的坐标集创建一个圆圈.
代码将类似于:
var coordinates = Array();
function findCoordinates(lat, long, range) {
}
coordinates = findCoordinates(-20, 40, 3);
现在让findCoordinates()函数发生魔术.
解决方法:
基本上你要做的是在给定半径的给定点的圆的半径上找到N个点.一种简单的方法是将360度的圆分成N个相等的块,并以规则的间隔找到点.
以下应该大致完成你所追求的 –
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;
}
然后,您可以轻松地使用您获得的点数组在Google地图上绘制您想要的圆圈.
但是,如果你的总体目标只是在一个点附近以固定半径绘制一个圆,那么一个更容易的解决方案可能是使用叠加.我发现KMBox非常容易设置 – 你给它一个中心点,一个半径和一个图像叠加(在你的情况下,一个透明的圆圈,边缘有一条可见的线),它会照顾其他一切,包括在放大/缩小时调整大小.