JAVA 后台计算 经纬度 最短距离
来源:互联网 发布:淘宝商店如何开通花呗 编辑:程序博客网 时间:2024/06/05 04:41
1、 代码块
package com.ilogie.tms.util;import java.io.IOException;import java.math.BigDecimal;import java.text.MessageFormat;public class LocationUtils {// 以下为 获得 两点之间最短距离 private static final BigDecimal EARTH_RADIUS = MathUtil.toBigDecimal(6378.137);//定义 地球半径 private static final BigDecimal MATH_PI = MathUtil.toBigDecimal(Math.PI);//定义Math.PI /**计算弧长**/ private static BigDecimal getRed(BigDecimal big){ return big.multiply(MATH_PI).divide(MathUtil.toBigDecimal(180.0), BigDecimal.ROUND_DOWN); } /** * 计算 两点 之间 的 最短距离 <br/> * 返回 数据 为 两点之间的 公里数 */ public static BigDecimal getShortestDistance(BigDecimal lat1,BigDecimal lng1, BigDecimal lat2,BigDecimal lng2 ){logger.debug("lat1: " +lat1+", lng1:" + lng1); logger.debug("lat2: " +lat2+", lng2:" + lng2); BigDecimal radLat1 = getRed(lat1); BigDecimal radLat2 = getRed(lat2); BigDecimal a = radLat1.subtract(radLat2); BigDecimal b = getRed(lng1).subtract(getRed(lng2)); Double sinA = Math.sin(a.doubleValue()/2); Double sinB = Math.sin(b.doubleValue()/2); Double cosA = radLat1.doubleValue(); Double cosB = radLat2.doubleValue(); Object obj = 2 * Math.asin(Math.sqrt(Math.pow(sinA,2) + Math.cos(cosA)*Math.cos(cosB)*Math.pow(sinB, 2))); BigDecimal s = new BigDecimal(obj); s = s.multiply(EARTH_RADIUS); return format(s, 3); } public static BigDecimal format(BigDecimal big, int scale) { scale = 0 > scale ? 0 : scale; big = big.setScale(scale, BigDecimal.ROUND_HALF_UP); return big; } public static void main(String[] args) { // latlng 31.2147094,121.5193688 上海浦东新区社区服务中心 // latlng 31.226327,121.4969213 上海普陀区星云招商办事处、 // 地图上 2.57 测试 2.58 // latlg 28.1939842 113.0108862 长沙火车站 // latlg 22.636828 113.814606 深圳宝安国际机场 BigDecimal lat1 = MathUtil.toBigDecimal(28.1939842); BigDecimal lng1 = MathUtil.toBigDecimal(113.0108862); BigDecimal lat2 = MathUtil.toBigDecimal(22.636828); BigDecimal lng2 = MathUtil.toBigDecimal(113.814606); System.out.println("最短距离:"+getShortestDistance(lat1, lng1, lat2, lng2)); }}
2、测试结果
1 0
- JAVA 后台计算 经纬度 最短距离
- 已知两点经纬度求球面最短距离的公式推导
- 计算各点到源点的最短距离
- Robot(计算最短距离,用Dijkstra算法)
- 迪杰斯特拉算法 计算两点之间最短距离
- 广度优先搜索算法-计算最短距离
- 最短距离
- 最短距离
- 最短距离
- 最短距离
- 计算点到线段最短距离的代码
- 基于局部landmark的近似最短距离计算
- 三维空间两直线/线段最短距离、线段计算算法
- 计算球面上两点间最短距离多语言版本
- 计算三维空间中点到三角形平面的最短距离
- 计算经纬度求出最短的距离
- Java-通过经纬度计算距离
- java根据经纬度计算距离
- android WebView 使用总结
- 【Android】基于Service组件的简易音乐播放器
- js打开新页面
- Appium(JAVA)Windows 7系统搭建及示例运行
- uva531
- JAVA 后台计算 经纬度 最短距离
- ThreadLocal可能引起的内存泄露
- 如何选择前端框架?
- 廖雪峰python教程
- Oracle定义DES加密解密及MD5加密函数示例
- Chewbaсca and Number
- Antimatter Ray Clearcutting uva11008
- Minimum Depth of Binary Tree
- Hibernate ORM入门03