Language agnostic 如何使用GPS坐标创建分区

Language agnostic 如何使用GPS坐标创建分区,language-agnostic,geometry,geodesic-sphere,Language Agnostic,Geometry,Geodesic Sphere,假设我有一个GPS坐标,比如说a(以经纬度十进制形式),那么我想创建一个半径为30米的区域(一个圆),这样我就可以捕获任何进入该区域的设备(使用GPS坐标),怎么做呢?感谢看看这个javascript示例,但是它很容易在任何其他语言上实现 主要代码: var earthRadiusKm = 3437.74677 * 1.1508 * 1.6093470878864446; function GeoArea(centerLat, centerLng, distanceKm, no

假设我有一个GPS坐标,比如说a(以经纬度十进制形式),那么我想创建一个半径为30米的区域(一个圆),这样我就可以捕获任何进入该区域的设备(使用GPS坐标),怎么做呢?感谢看看这个javascript示例,但是它很容易在任何其他语言上实现

主要代码:

    var earthRadiusKm = 3437.74677 * 1.1508 * 1.6093470878864446;

    function GeoArea(centerLat, centerLng, distanceKm, northPoint, southPoint, eastPoint, westPoint) {
        this.northPoint = northPoint;
        this.southPoint = southPoint;
        this.eastPoint = eastPoint;
        this.westPoint = westPoint;
        this.inArea = function (lat, lng) {
            var inBox = southPoint.lat <= lat && lat <= northPoint.lat && westPoint.lng <= lng && lng <= eastPoint.lng;
            if (inBox) {
                var distanceFromCenterKm = calcDistance(centerLat, centerLng, lat, lng);
                return distanceFromCenterKm <= distanceKm;
            } else {
                return false;
            }
        }
    }

    function GeoPoint(lat, lng) {
        this.lat = lat;
        this.lng = lng;
    }

    function toDegrees(radians) {
        return radians / (Math.PI / 180);
    }

    function toRadians(degrees) {
        return Math.PI / 180 * degrees;
    }

    function calcDistance(latA, lngA, latB, lngB) {
        var rLatA = toRadians(latA);
        var rLatB = toRadians(latB);
        var rHalfDeltaLat = toRadians((latB - latA) / 2);
        var rHalfDeltaLng = toRadians((lngB - lngA) / 2);

        return 2 * earthRadiusKm * Math.asin(Math.sqrt(Math.pow(Math.sin(rHalfDeltaLat), 2) + Math.cos(rLatA) * Math.cos(rLatB) * Math.pow(Math.sin(rHalfDeltaLng), 2)));
    }

    function findPoint(lat, lng, bearing, distance) {
        var rLat = toRadians(lat);
        var rLng = toRadians(lng);
        var rBearing = toRadians(bearing);
        var rAngDist = distance / earthRadiusKm;

        var rLatB = Math.asin(Math.sin(rLat) * Math.cos(rAngDist) + Math.cos(rLat) * Math.sin(rAngDist) * Math.cos(rBearing));
        var rLngB = rLng + Math.atan2(Math.sin(rBearing) * Math.sin(rAngDist) * Math.cos(rLat), Math.cos(rAngDist) - Math.sin(rLat) * Math.sin(rLatB));

        var pLat = toDegrees(rLatB);
        var pLng = toDegrees(rLngB);
        return new GeoPoint(pLat, pLng);
    }

    function calcArea(lat, lng, distanceKm) {
        var northPoint = findPoint(lat, lng, 0, distanceKm);
        var eastPoint = findPoint(lat, lng, 90, distanceKm);
        var southPoint = findPoint(lat, lng, 180, distanceKm);
        var westPoint = findPoint(lat, lng, 270, distanceKm);
        return new GeoArea(lat, lng, distanceKm, northPoint, southPoint, eastPoint, westPoint);
    }

哈?这与JavaScript有什么关系?我试过了,它给出了33个错误-抱歉,请帮助看起来不错-我会尝试-非常感谢,我希望它能在30米的情况下工作是的,它能工作。在这种情况下,distanceKm参数应该等于0.030抱歉,Nikita,我试过了,但我有这么多错误,在开始编写代码之前我应该声明什么?哪个您使用的是Java版本吗?谢谢您的帮助我尝试使用Javascript,但它不起作用-没有错误,但没有输出。这是一个Javascript而不是Java。看看这里-只需按“运行”。在这个版本中,我添加了两个警报,以显示“真”和“假”结果。一切正常!
    // calculate area with center in lat:55.742793 lng:37.615401
    // and distance in 23 km
    var area = calcArea(55.742793, 37.615401, 23);

    //returns true
    area.inArea(55.714735, 37.629547);
    //returns false
    area.inArea(55.693842, 38.015442);