方法一:

/**

* 计算地球上任意两点(经纬度)距离

*

* @param long1

*            第一点经度

* @param lat1

*            第一点纬度

* @param long2

*            第二点经度

* @param lat2

*            第二点纬度

* @return 返回距离 单位:米

*/

public static double Distance(double long1, double lat1, double long2, double lat2) {

double a, b, R;

R = 6378137; // 地球半径

lat1 = lat1 * Math.PI / 180.0;

lat2 = lat2 * Math.PI / 180.0;

a = lat1 - lat2;

b = (long1 - long2) * Math.PI / 180.0;

double d;

double sa2, sb2;

sa2 = Math.sin(a / 2.0);

sb2 = Math.sin(b / 2.0);

d = 2

* R

* Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1)

* Math.cos(lat2) * sb2 * sb2));

return d;

}

方法二:(恋家厨房中用的)

private const double EARTH_RADIUS = 6378.137;

private static double rad(double d)

{

return d * Math.PI / 180.0;

}

public static double GetDistance(double lat1, double lng1, double lat2, double lng2)

{

double radLat1 = rad(lat1);

double radLat2 = rad(lat2);

double a = radLat1 - radLat2;

double b = rad(lng1) - rad(lng2);

double 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;

return s;

}

工具类:

import android.util.Log;

import com.baidu.mapapi.model.LatLng;

/**

* Created by SRain on 2015/10/16.

*

* 计算两点间距离

*

* 路线规划提供了获取路线距离的方法,见MKRoutePlan 类的 getDistance 方法。

* 如果是计算任意两点的距离,有两种方法:

* 一种利用勾股定理计算,适用于两点距离很近的情况;

* 一种按标准的球面大圆劣弧长度计算,适用于距离较远的情况。

*/

public class CalculateDistanceUtils {

static double DEF_PI = 3.14159265359; // PI

static double DEF_2PI = 6.28318530712; // 2*PI

static double DEF_PI180 = 0.01745329252; // PI/180.0

static double DEF_R = 6370693.5; // radius of earth

/**

* 利用勾股定理计算,适用于两点距离很近的情况;

*

* @param lon1

* @param lat1

* @param lon2

* @param lat2

* @return

*/

public double GetShortDistance(double lon1, double lat1, double lon2, double lat2) {

double ew1, ns1, ew2, ns2;

double dx, dy, dew;

double distance;

// 角度转换为弧度

ew1 = lon1 * DEF_PI180;

ns1 = lat1 * DEF_PI180;

ew2 = lon2 * DEF_PI180;

ns2 = lat2 * DEF_PI180;

// 经度差

dew = ew1 - ew2;

// 若跨东经和西经180 度,进行调整

if (dew > DEF_PI)

dew = DEF_2PI - dew;

else if (dew

dew = DEF_2PI + dew;

dx = DEF_R * Math.cos(ns1) * dew; // 东西方向长度(在纬度圈上的投影长度)

dy = DEF_R * (ns1 - ns2); // 南北方向长度(在经度圈上的投影长度)

// 勾股定理求斜边长

distance = Math.sqrt(dx * dx + dy * dy);

return distance;

}

/**

* 按标准的球面大圆劣弧长度计算,适用于距离较远的情况。

*

* @param lon1

* @param lat1

* @param lon2

* @param lat2

* @return

*/

public double GetLongDistance(double lon1, double lat1, double lon2, double lat2) {

double ew1, ns1, ew2, ns2;

double distance;

// 角度转换为弧度

ew1 = lon1 * DEF_PI180;

ns1 = lat1 * DEF_PI180;

ew2 = lon2 * DEF_PI180;

ns2 = lat2 * DEF_PI180;

// 求大圆劣弧与球心所夹的角(弧度)

distance = Math.sin(ns1) * Math.sin(ns2) + Math.cos(ns1) * Math.cos(ns2) * Math.cos(ew1 - ew2);

// 调整到[-1..1]范围内,避免溢出

if (distance > 1.0)

distance = 1.0;

else if (distance

distance = -1.0;

// 求大圆劣弧长度

distance = DEF_R * Math.acos(distance);

return distance;

}

/**

* 按标准的球面大圆劣弧长度计算,适用于距离较远的情况。

*

* @param atLatLng    当前位置

* @param guideLatLng 景点位置

* @return

*/

public static double GetLongDistance(LatLng atLatLng, LatLng guideLatLng) {

double ew1, ns1, ew2, ns2;

double distance;

// 角度转换为弧度

ew1 = atLatLng.longitude * DEF_PI180;

ns1 = atLatLng.latitude * DEF_PI180;

ew2 = guideLatLng.longitude * DEF_PI180;

ns2 = guideLatLng.latitude * DEF_PI180;

// 求大圆劣弧与球心所夹的角(弧度)

distance = Math.sin(ns1) * Math.sin(ns2) + Math.cos(ns1) * Math.cos(ns2) * Math.cos(ew1 - ew2);

// 调整到[-1..1]范围内,避免溢出

if (distance > 1.0)

distance = 1.0;

else if (distance

distance = -1.0;

// 求大圆劣弧长度

distance = DEF_R * Math.acos(distance);

return distance;

}

/**

* 按标准的球面大圆劣弧长度计算,适用于距离较远的情况。

*

* @param atLatLng  当前位置

* @param longitude 景点位置

* @param latitude  景点位置

* @return

*/

public static double GetLongDistance(LatLng atLatLng, double longitude, double latitude) {

double ew1, ns1, ew2, ns2;

double distance;

// 角度转换为弧度

ew1 = atLatLng.longitude * DEF_PI180;

ns1 = atLatLng.latitude * DEF_PI180;

ew2 = longitude * DEF_PI180;

ns2 = latitude * DEF_PI180;

// 求大圆劣弧与球心所夹的角(弧度)

distance = Math.sin(ns1) * Math.sin(ns2) + Math.cos(ns1) * Math.cos(ns2) * Math.cos(ew1 - ew2);

// 调整到[-1..1]范围内,避免溢出

if (distance > 1.0)

distance = 1.0;

else if (distance

distance = -1.0;

// 求大圆劣弧长度

distance = DEF_R * Math.acos(distance);

//        Log.e("distance", "atLatLng" + atLatLng.latitude + "   " + atLatLng.longitude + "\n" + "longitude:" + longitude + "latitude" + latitude + "\n dis:" + distance);

return distance;

}

/**

* 比较景点信息

* 当前位置是否在景区中

*

* @param atLatLng  当前位置

* @param longitude 景点位置

* @param latitude  景点位置

* @param radius    景点范围半径

* @return

*/

public static boolean isAtRange(LatLng atLatLng, double longitude, double latitude, double radius) {

boolean b = false;

// 获取当前位置和景区位置的距离

double distance = GetLongDistance(atLatLng, longitude, latitude);

if (radius > distance) {

b = true;

}

Log.e("-----distance-----", "\n distance:" + distance + "\n radius:" + radius + "\n b:" + b);

return b;

}

}

android 两点距离计算公式,Android 计算地球上任意两点(经纬度)距离相关推荐

  1. JAVA 计算地球上任意两点(经纬度)距离

    /*** 计算地球上任意两点(经纬度)距离* * @param long1* 第一点经度* @param lat1* 第一点纬度* @param long2* 第二点经度* @param lat2* ...

  2. 由经纬度计算地球上任意两点的距离

    由经纬度计算地球上任意两点的距离 在地球上,城市的地理位置.GPS定位.一些地标的地理位置等是由经纬度给出的,本文主要根据两个地理位置的经纬度,来计算两个地理位置之间的距离. %计算城市间距离 zb= ...

  3. 计算球面上任意两点间的球面距离(C++实现)

    文章目录 1 预备知识 2 原理描述 3 代码实现 1 预备知识 在求解此问题之前首先要明确一下几点: (1)两点间的球面距离: 球面上两点间的最短距离,即球心与球面上两点所确定的平面与球面相交,得到 ...

  4. 根据地球上任意两点的经纬度计算两点间的距离

    http://blog.chinaunix.net/u/6776/showart_694778.html 地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为6356.755千米, ...

  5. Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现

    目录 方式一:自定义公式计算 方式二:geodesy计算距离 方式三:geotools计算距离 两个点的经纬度 latitude纬度 longitude经度 地点 22.678611 113.8056 ...

  6. 怎么用Python计算地球上任意两个用经纬度表示的点的弧面距离?

    这是来自知乎上的问题.问我的时候,恰好我在写一个和向量计算相关的文章,于是灵光乍现,顺手写了这样一个答案.该算法未经严格验证,请谨慎参考.具体思路如下. 将两个点的经纬度换算成空间坐标: 计算地心与两 ...

  7. php 计算两点时间距离,PHP计算地球上两点之间的距离(示例详解)

    给定经度和纬度,求地球上两点之间的距离.首先我们需要了解该问题的解决思路,然后再用PHP代码来实现计算. 此问题可以用半正矢(haversine)公式求解: 大圆距离或正交距离是球面(或地球表面)上两 ...

  8. 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

    目录 摘要 1.半正矢公式(Haversine Formula)介绍 2.半正矢公式应用 3.半正矢公式计算 3.1 主要思路 3.2 计算步骤 3.2.1 平面向量计算方法 3.2.2 空间向量计算 ...

  9. 给定经纬度计算距离_根据经纬度计算地球上两点之间的距离js实现代码

    利用JS实现的根据经纬度计算地球上两点之间的距离 最近用到了根据经纬度计算地球表面两点间距离的公式,然后就用JS实现了一下. 计算地球表面两点间的距离大概有两种办法. 第一种是默认地球是一个光滑的球面 ...

  10. C语言入门实战(2):求平面上任意两点之间的距离

    这是<C语言入门实战>系列的第2篇. 上一篇:C语言入门实战(1):准备开发环境.快速上手main()函数 下一篇:C语言入门实战(3):秒数转换为时:分:秒 文章目录 题目 提示 参考代 ...

最新文章

  1. mysql的判断更新_mysql判断记录是否存在,存在则更新,不存在则插入
  2. 栈的链式存储及常用操作
  3. hyperv的安装与使用
  4. C++:18---const关键字(附常量指针、指针常量、常量指针常量)
  5. svm算法原理_机器学习——分类算法(1)
  6. 学术前沿 | Texar-PyTorch:在PyTorch里重现TensorFlow的最佳特性
  7. ★LeetCode(429)——N叉树的层序遍历(JavaScript)
  8. redmin3 忘记管理密码找回方法
  9. Origami 用于Quartz 的免费的交互设计框架
  10. cross_val_score 如何对孤立森林_泸县九中开展 “森林草原防灭火”主题班会活动...
  11. 【ML小结8】降维与度量学习(KNN、PCA、因子分析、LDA)
  12. 快速突破面试算法之分治算法篇
  13. c语言编写一个用户登录界面,怎么用C语言编写个登陆界面?
  14. 可以上传、下载文件的SSH客户端软件--SecureCRT绿色版
  15. 口袋之旅html5超强账号,《口袋之旅H5》攻略:各大排行榜冲榜攻略
  16. 初探PHP开源采集器----蓝天采集器
  17. Vue中使用防抖与截流
  18. Dilworth 定理
  19. 百家号平台中的问答功能,自媒体人可以这样玩!
  20. 2023江南大学计算机考研信息汇总

热门文章

  1. C语言大作业--小型工资管理系统
  2. 中国天气网城市代码表(MYSQL)
  3. 51单片机学习1-8
  4. 乾颐堂军哥华为HCNP真题讲解(2017至2018版)真题更新版到来
  5. Python考试题库(含答案)
  6. 安利FeHelper
  7. matlab BP神经网络入门
  8. Linux操作系统实践
  9. 机械革命Z3 Pro测试,从开箱到翻车到上岸到发烧(多图预警)
  10. 2020网络安全NISP一级题库