ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 在纬度和长度的某个范围内查找一组坐标

2019-09-30 16:35:23  阅读:202  来源: 互联网

标签:javascript google-maps coordinates latitude-longitude


我正在开发一个涉及谷歌地图的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非常容易设置 – 你给它一个中心点,一个半径和一个图像叠加(在你的情况下,一个透明的圆圈,边缘有一条可见的线),它会照顾其他一切,包括在放大/缩小时调整大小.

标签:javascript,google-maps,coordinates,latitude-longitude
来源: https://codeday.me/bug/20190930/1836244.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有