如何在javascript中生成具有已知中心和半径的随机Lat-lng值?

时间:2014-08-17 15:44:59

标签: javascript heatmap

我想在100米半径范围内创建一个热图图层,所以我想在该特定半径内生成随机的lat-long值,因此希望用

替换它
 var taxiData = [
{location: new google.maps.LatLng(41.8819, -87.6278),weight: 2},
{location: new google.maps.LatLng(41.8820, -87.6279),weight: 1},
 new google.maps.LatLng(41.8821, -87.6280),
{location: new google.maps.LatLng(41.8822, -87.6281),weight: 2},
{location: new google.maps.LatLng(41.8823, -87.6282),weight: 5},
{location: new google.maps.LatLng(41.8824, -87.6283),weight: 3},
];

请帮助

1 个答案:

答案 0 :(得分:7)

这应该允许你这样做。

代码的作用:

首先,我们在三角形内生成一个相当均匀的随机点,然后将其转换为半径圆内的一个点。然后我们将该点转换为偏移坐标并将它们添加到原始坐标。

返回包含两个值latitudelongitude的对象。

var getRandomLocation = function (latitude, longitude, radiusInMeters) {

    var getRandomCoordinates = function (radius, uniform) {
        // Generate two random numbers
        var a = Math.random(),
            b = Math.random();

        // Flip for more uniformity.
        if (uniform) {
            if (b < a) {
                var c = b;
                b = a;
                a = c;
            }
        }

        // It's all triangles.
        return [
            b * radius * Math.cos(2 * Math.PI * a / b),
            b * radius * Math.sin(2 * Math.PI * a / b)
        ];
    };

    var randomCoordinates = getRandomCoordinates(radiusInMeters, true);

    // Earths radius in meters via WGS 84 model.
    var earth = 6378137;

    // Offsets in meters.
    var northOffset = randomCoordinates[0],
        eastOffset = randomCoordinates[1];

    // Offset coordinates in radians.
    var offsetLatitude = northOffset / earth,
        offsetLongitude = eastOffset / (earth * Math.cos(Math.PI * (latitude / 180)));

    // Offset position in decimal degrees.
    return {
        latitude: latitude + (offsetLatitude * (180 / Math.PI)),
        longitude: longitude + (offsetLongitude * (180 / Math.PI))
    }
};