注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿弥陀佛

街树飘影未见尘 潭月潜水了无声 般若观照心空静...

 
 
 

日志

 
 
关于我

一直从事气象预报、服务建模实践应用。 注重气象物理场、实况场、地理信息、本体知识库、分布式气象内容管理系统建立。 对Barnes客观分析, 小波,计算神经网络、信任传播、贝叶斯推理、专家系统、网络本体语言有一定体会。 一直使用Java、Delphi、Prolog、SQL编程。

网易考拉推荐

scala 两经纬度间距离计算公式  

2014-08-04 22:07:25|  分类: Scala |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
两经纬度间距离计算公式。   
Haversine formula
16种语言实现
public static double[] deg2km(float fLon1, float fLat1, float fLon2,  float fLat2)   {
        double dAvgLat =     (double)((fLat1 + fLat2)) / 2.0d * Math.PI / 180.0d;
        double dKmx =        (double)((fLon2 - fLon1))    / 1000.0d  * ((111415.1d * Math.cos(dAvgLat))
                    - (94.54999d * Math.cos(3.0d * dAvgLat)) - (0.12d * Math
                    .cos(5.0d * dAvgLat)));
        double dKmy =
            (double)((fLat2 - fLat1))
                / 1000.0d
                * (111132.1d
                    - (566.05d * Math.cos(2.0d * dAvgLat))
                    + (1.2d * Math.cos(4.0d * dAvgLat)) - (0.003d * Math
                    .cos(6.0d * dAvgLat)));
        double[] daKm = new double[2];
        daKm[0] = dKmx;
        daKm[1] = dKmy;

        // The OSA analysis has been changed to use a coordinate
        // system based on meters rather than degrees
        // latitude/longitude.
        // To get values in kms, just divide by 1000
        daKm[0] = (fLon2 - fLon1) / 1000.0;
        daKm[1] = (fLat2 - fLat1) / 1000.0;

        AnalysisParameters ap = new AnalysisParameters(
            0.0d, 0.0d, 0.0d, 0.0d);
        return daKm;
    }



===================================================================
def distanceBetweenPoints(pointA: LatLng, pointB: LatLng): Double = {
    import Math._
    // Setup the inputs to the formula
    val R = 6371009d // average radius of the earth in metres
    val dLat = toRadians(pointB.lat - pointA.lat)
    val dLng = toRadians(pointB.lng - pointA.lng)
    val latA = toRadians(pointA.lat)
    val latB = toRadians(pointB.lat)

    // The actual haversine formula. a and c are well known value names in the formula.
    val a = sin(dLat / 2) * sin(dLat / 2) +
    sin(dLng / 2) * sin(dLng / 2) * cos(latA) * cos(latB)
    val c = 2 * atan2(sqrt(a), sqrt(1 - a))
    val distance = R * c

    distance
  }
  评论这张
 
阅读(408)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017