js计算地球两个经纬度之间的距离

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
     <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/1.6.4/jquery.js"></script>
    <script type="text/javascript">
        var EARTH_RADIUS = 6378137.0;    //单位M
        var PI = Math.PI;

        function getRad(d) {
            return d * PI / 180.0;
        }

        /**
        * caculate the great circle distance
        * @param {Object} lat1(纬度1)
        * @param {Object} lng1(经度1)
        * @param {Object} lat2(纬度2)
        * @param {Object} lng2(经度2)
        */
        //第一种方法:这种算法是把地球当作规则的球面来计算的咯,这种方法不是很精准咯,这个还要取决你定位的精准度咯
        function getGreatCircleDistance(lat1, lng1, lat2, lng2) {
            var radLat1 = getRad(lat1);
            var radLat2 = getRad(lat2);

            var a = radLat1 - radLat2;
            var b = getRad(lng1) - getRad(lng2);

            var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
            s = s * EARTH_RADIUS;
            s = Math.round(s * 10000) / 10000.0;

            alert(s);
        }
        //第一种方法:地球是椭圆的,所以会有这种算法
        function getFlatternDistance(lat1, lng1, lat2, lng2) {
            var f = getRad((lat1 + lat2) / 2);
            var g = getRad((lat1 - lat2) / 2);
            var l = getRad((lng1 - lng2) / 2);

            var sg = Math.sin(g);
            var sl = Math.sin(l);
            var sf = Math.sin(f);

            var s, c, w, r, d, h1, h2;
            var a = EARTH_RADIUS;
            var fl = 1 / 298.257;

            sg = sg * sg;
            sl = sl * sl;
            sf = sf * sf;

            s = sg * (1 - sl) + (1 - sf) * sl;
            c = (1 - sg) * (1 - sl) + sf * sl;

            w = Math.atan(Math.sqrt(s / c));
            r = Math.sqrt(s * c) / w;
            d = 2 * w * a;
            h1 = (3 * r - 1) / 2 / c;
            h2 = (3 * r + 1) / 2 / s;
            alert( d * (1 + fl * (h1 * sf * (1 - sg) - h2 * (1 - sf) * sg)));
        }
        $(function () {
            getFlatternDistance(28.89596, 105.443985, 28.896462, 105.444291);
        });
    </script>
</head>
<body>
63.3422
</body>
</html>
时间: 2024-10-14 19:14:34

js计算地球两个经纬度之间的距离的相关文章

计算两个经纬度之间的距离

//计算两个经纬度之间的距离 /** * 计算两点地理坐标之间的距离 * @param Decimal $longitude1 起点经度 * @param Decimal $latitude1 起点纬度 * @param Decimal $longitude2 终点经度 * @param Decimal $latitude2 终点纬度 * @param Int $unit 单位 1:米 2:公里 * @param Int $decimal 精度 保留小数位数 * @return Decimal

IOS 计算两个经纬度之间的距离

一 丶 -(double)distanceBetweenOrderBy:(double) lat1 :(double) lat2 :(double) lng1 :(double) lng2{ CLLocation *curLocation = [[CLLocation alloc] initWithLatitude:lat1 longitude:lng1]; CLLocation *otherLocation = [[CLLocation alloc] initWithLatitude:lat2

计算两个经纬度之间的距离(python算法)

EARTH_REDIUS = 6378.137 def rad(d): return d * pi / 180.0 def getDistance(lat1, lng1, lat2, lng2): radLat1 = rad(lat1) radLat2 = rad(lat2) a = radLat1 - radLat2 b = rad(lng1) - rad(lng2) s = 2 * math.asin(math.sqrt(math.pow(sin(a/2), 2) + cos(radLat1

数据库中查询,两个经纬度之间的距离代码

double radians(double degrees) { return degrees * M_PI / 180.0; } - (void)testDistance { FMDatabase *db = [FMDatabase databaseWithPath:_writableDBPath]; if (![db open]) { return; } [db makeFunctionNamed:@"distance" maximumArguments:4 withBlock:^

获取两个点经纬度之间的距离

/** * js获取两个经纬度之间的距离 * @param lat1 第一点的纬度 * @param lng1 第一点的经度 * @param lat2 第二点的纬度 * @param lng2 第二点的经度 * @returns {Number} */ function getDistance(lat1, lng1, lat2, lng2) { var radLat1 = lat1*Math.PI / 180.0; var radLat2 = lat2*Math.PI / 180.0; var

PHP计算2点经纬度之间的距离代码

以下是对PHP计算2点经纬度之间的距离代码进行了分析介绍,需要的朋友可以过来参考下 <?php function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) { $theta = $longitude1 - $longitude2; $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad

计算min-max两个整数之间的随机整数

/*------------------------------效率最低 功能:计算min-max两个整数之间的随机整数 作者: 日期:20180831 区别:在查询中嵌入count(*)计算记录总条数,效率最低 */ --SET STATISTICS IO ON; SET STATISTICS TIME ON; GO DECLARE @min INT= 1; DECLARE @max INT= 100; DECLARE @icount INT= 0; DECLARE @t TABLE ( i

求二叉树的给定两个结点之间的距离

给定一颗二叉树,和两个给定的结点,求出这两个结点之间的距离 拿到题目时不要认为是求出二叉树的结点之间的最大距离,题目是求两个结点的之间的距离 题目有几种情况 两个结点分布在根节点的左子树或者右子树 一个结点分布在根节点的左子树,一个结点分布在根节点的右子树 这两个结点是兄弟结点 一个结点是另外结点的祖先结点 本题的解题思路是 利用层次遍历的方法,获取每个结点的高度,根节点左子树的高度用正数表示,根节点右子树的高度用负数表示 这样当两个结点分布在:一个结点分布在根节点的左子树,一个结点分布在根节点

两经纬度之间的距离计算

以下是计算两经纬度之间距离的代码,分为:头文件.源代码和测试代码三部分.具体如下: 1 // LatLonDistanceDlg.h : 头文件 2 // 3 4 #pragma once 5 6 typedef struct 7 { 8 double dLongitude; 9 double dLatitude; 10 }MyLatLong_T,*pMyLatLong_T; 11 12 // CLatLonDistanceDlg 对话框 13 class CLatLonDistanceDlg