首页 > 编程语言 >根据经纬度求两点间距离实现源码(java)

根据经纬度求两点间距离实现源码(java)

时间:2023-02-07 10:01:00浏览次数:52  
标签:java 经纬度 double param 源码 lng1 lat1 lng2 Math


研究了一下Google Map上的根据经纬度求地球表面两点间距离的实现, 用java实现了一把,对我国境内的Beijing54, Xian80,WGS84三种坐标系的空间距离计算感觉这个实现是比较准确的。当然,这里只是个人的感觉而已。。。可能我还没有遇到那种对精度要求非常严格的地方,或许,本身我这个方式就是错误的。。。呵呵。。。这里只是作个记号先。。。各位达人多多指教

/**
*
* <p>
* Title: GeoUtils.java
* </p>
* <p>
* Http: iaiai.iteye.com
* </p>
* <p>
* Create time: 2012-5-4 下午1:49:34
* </p>
*
* @author 丸子
* @version 0.0.1
*/
public class GeoUtils {

public enum GaussSphere {
Beijing54, // Krassovsky(北京54 采用)
Xian80, // IAG 75(西安80 采用)
WGS84, // WGS 84
}

private static double rad(double d) {
return d * Math.PI / 180.0;
}

/**
* 计算经纬度之间的距离
*
* @param lat1
* @param lng1
* @param lat2
* @param lng2
* @return
*/
public static double getDistance(double lng1, double lat1, double lng2, double lat2, GaussSphere gs) {
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 * (gs == GaussSphere.WGS84 ? 6378137.0 : (gs == GaussSphere.Xian80 ? 6378140.0 : 6378245.0));
s = Math.round(s * 10000) / 10000;
return s;
}

/**
* 计算经纬度之间的距离
*
* @param lat1
* @param lng1
* @param lat2
* @param lng2
* @return
*/
public static double getDistance(double lng1, double lat1, double lng2, double lat2) {
return getDistance(lng1,lat1,lng2,lat2,GaussSphere.WGS84);
}

}

标签:java,经纬度,double,param,源码,lng1,lat1,lng2,Math
From: https://blog.51cto.com/u_15955464/6041292

相关文章

  • ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type
    用java处理图片的时候,ImageIO读jpg的时候出现exception:bandOffsets.lengthiswrong。我也遇到过,最终也解决啦,把成果跟大家分享。原因可能是JPEG图......
  • java 最短路径算法
    packageorg.iaiai.suanfa;importjava.util.ArrayList;/****<p>*Title:Dijkstra.java*</p>*<p>*Http:iaiai.iteye.com*</p>*<p>*Createtime:2011-8-......
  • java 广度优先
    就是按照正常顺序把tree打出来,假设有个tree是1/\23/\/\4567打印出来就是1,2,3,4,5,6,7;这个就是宽度优先packageorg.iaiai.suanfa;i......
  • java 深度优先搜索(回溯法)
    深度优先遍历类似于树的前序遍历。采用的搜索方法的特点是尽可能先对纵深方向进行搜索。这种搜索方法称为深度优先搜索(Depth-FirstSearch)。相应地,......
  • Java+Swing实现学生选课管理系统 (1)
    @目录一、系统介绍二、系统展示1.课程查询2.课程添加3.退课三、系统实现四、获取源码一、系统介绍本系统实现了学生登录和管理员登录,学生实现选课,查看已选课程,修改密码,查......
  • Java+Swing+dat文件存储实现学生选课管理系统
    @目录一、系统介绍二、系统展示1.用户登陆、注册2.课程信息查询3.添加课程4.选课5.退课三、系统实现四、.获取源码一、系统介绍功能展示:用户注册、用户登陆课程管理:课程......
  • Java+Swing学生信息管理系统
    @目录一、系统介绍二、功能展示1.管理员登陆2.学生信息查询3.学生信息添加4.学生信息修改5.删除三、系统实现1.StudentFrame.java四、获取源码一、系统介绍该系统实现了......
  • Java JDK Proxy和CGLib动态代理示例讲解
    简介代理模式在Java中有很多应用场景,而代理又分静态代码和动态代理。静态代理是编写、编译或加载时织入代码实现,而动态代理则在运行时实现。简单而言,静态代理是在运行前就......
  • Javascript打包后移除console语句
    NodeJS项目安装包npminstallbabel-plugin-transform-remove-console--save-dev配置Babelconstplugins=[]//如果不是开发环境则启用if(process.env.NODE_ENV!......
  • Java+Swing可视化图像处理软件
    @目录一、系统介绍二、功能展示1.图片裁剪2.图片缩放3.图片旋转4.图像灰度处理5.图像变形6.图像扭曲7.图像移动三、系统实现1.ImageProcessing.java四、获取源码一、系统......