java根据距离计算经纬度_Java根据两点的经纬度来计算之间的距离
解决此问题的关键是要理解空间几何模型,在理解空间几何模型的基础上再利用数学公式求取两点之间的值。其解决步骤如下:
1、设两点分别为P1、P2,如果其值是用度分秒形式表示,则需将其转换成十进制度的形式,如P1点纬度为23度30分,则其纬度值转换成十进制度的形式为23.5度。如果值为十进制度的形式,则直接进入第二步。
2、分别将两点的经度、纬度值转换成弧度制形式,如P1纬度为23.5度,转换成弧度制则为:23.5*PI / 180。分别用 P1latInRad、P1LongInRad、P2latInRad、P2LongInRad表示。
3、分别求取两点间的纬度差(dlat)与经度差(dlon);
4、求取两点间的正弦与余弦值,公式如下:
A=sin2(dlat/2) + cos(P1LatInRad)*cos(P2LatInRad)*Sin2(dlon/2) (1)
5、求取两点的正切值,公式如下:
C=2*Math.Atan2(Math.Sqrt(A), Math.Sqrt(1-A)) (2)
6、返回两点间的距离:公式如下:
D=EarthRadiusKm * C (3)
import java.util.HashMap;
import java.util.Map;
public class MapDistance {
private static double EARTH_RADIUS = 6378.137;
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
* 根据两个位置的经纬度,来计算两地的距离(单位为KM)
* 参数为String类型
* @param lat1 用户经度
* @param lng1 用户纬度
* @param lat2 商家经度
* @param lng2 商家纬度
* @return
*/
public static String getDistance(String lat1Str, String lng1Str, String lat2Str, String lng2Str) {
Double lat1 = Double.parseDouble(lat1Str);
Double lng1 = Double.parseDouble(lng1Str);
Double lat2 = Double.parseDouble(lat2Str);
Double lng2 = Double.parseDouble(lng2Str);
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double difference = radLat1 - radLat2;
double mdifference = rad(lng1) - rad(lng2);
double distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(difference / 2), 2)
+ Math.cos(radLat1) * Math.cos(radLat2)
* Math.pow(Math.sin(mdifference / 2), 2)));
distance = distance * EARTH_RADIUS;
distance = Math.round(distance * 10000) / 10000;
String distanceStr = distance+"";
distanceStr = distanceStr.
substring(0, distanceStr.indexOf("."));
return distanceStr;
}
/**
* 获取当前用户一定距离以内的经纬度值
* 单位米 return minLat
* 最小经度 minLng
* 最小纬度 maxLat
* 最大经度 maxLng
* 最大纬度 minLat
*/
public static Map getAround(String latStr, String lngStr, String raidus) {
Map map = new HashMap();
Double latitude = Double.parseDouble(latStr);// 传值给经度
Double longitude = Double.parseDouble(lngStr);// 传值给纬度
Double degree = (24901 * 1609) / 360.0; // 获取每度
double raidusMile = Double.parseDouble(raidus);
Double mpdLng = Double.parseDouble((degree * Math.cos(latitude * (Math.PI / 180))+"").replace("-", ""));
Double dpmLng = 1 / mpdLng;
Double radiusLng = dpmLng * raidusMile;
//获取最小经度
Double minLat = longitude - radiusLng;
// 获取最大经度
Double maxLat = longitude + radiusLng;
Double dpmLat = 1 / degree;
Double radiusLat = dpmLat * raidusMile;
// 获取最小纬度
Double minLng = latitude - radiusLat;
// 获取最大纬度
Double maxLng = latitude + radiusLat;
map.put("minLat", minLat+"");
map.put("maxLat", maxLat+"");
map.put("minLng", minLng+"");
map.put("maxLng", maxLng+"");
return map;
}
public static void main(String[] args) {
//济南国际会展中心经纬度:117.11811 36.68484
//趵突泉:117.00999000000002 36.66123
//System.out.println(getDistance("117.11811","36.68484","117.00999000000002","36.66123"));
System.out.println(getAround("117.11811", "36.68484", "13000"));
//117.01028712333508(Double), 117.22593287666493(Double),
//36.44829619896034(Double), 36.92138380103966(Double)
}
}
from:http://www.open-open.com/code/view/1427851920006
from:http://www.cnblogs.com/computer-lzy/archive/2011/04/21/2024289.html
java根据距离计算经纬度_Java根据两点的经纬度来计算之间的距离相关推荐
- pythongps距离_在Python中求两个gps点之间的距离
我有下面的方法(haversine)返回两个gps点之间的距离.下表是我的数据帧.在 当我使用在dataframe上应用函数时,我得到错误"cannot convert the series ...
- java 计算弧度_java中角度或弧度的计算
math中调用tan()的反三角函数. 应该表达为 (角度/180度)* π(3.14)= Math.atan((dpPoint.y-dpCenter.y) / (dpPoint.x-dpCenter ...
- matlab利用经纬度计算距离,MATLAB函数可计算两个坐标(纬度和经度)之间的距离...
How can I calculate distance between two world map coordinates (latitude and longitude) using MATLAB ...
- 4字节 经纬度_java 获取本机经纬度
package com.smm.web.mtower.util; import java.io.BufferedReader; import java.io.IOException; import j ...
- java多个类调用_JAVA问题总结之15-多个类之间的调用
JAVA问题总结之15-多个类之间的调用: 代码: package java3; public class test1 { public static void main(String[] args) ...
- java 类型转string类型_java常用类String与其他数据类型之间的转化
1.包装类之间转换 2.包装类对象转换为对应的基本数据类型变量 1. 定义一个String str = "1234"; 2. 将其转换为double类型并输出 3.使用Double ...
- 根据地球上任意两点的经纬度计算两点间的距离
http://blog.chinaunix.net/u/6776/showart_694778.html 地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为6356.755千米, ...
- Java代码实现三维立体空间中两点距离的求解
资源下载地址:https://download.csdn.net/download/sheziqiong/86763912 资源下载地址:https://download.csdn.net/downl ...
- 用计算python两点之间的距离math_自学生信Python(第二天)|计算出两点之间的距离...
计算出两点之间的距离 日常旁白:本人是一枚生物学的学生,由于对生物信息学特别感兴趣,于是想自学生物信息学(新手莫怪).了解到生物信息学要有编程基础,尤其是要会一门编程语言,例如:R语言.Python. ...
最新文章
- MPC8313ERDB不新鲜pkg包裹,把文件放进Ramdisk
- 读8篇论文,梳理BERT相关模型进展与反思
- HttpClient第一章(一)
- 排版 项目 html,项目需求讨论: 文字显示排版— Html 格式
- 对时域连续信号用matlab离散,数字信号处理上机实验一 离散时间信号的时域分析...
- ASP.NET中TextBox控件设置ReadOnly=true后台取不到值
- CentOS 5.8 正式发布
- javascript保留两位
- twitter达人不能不知的缩写
- hbase regions_使用Regions ADF 11g进行Master Detail CRUD操作
- Linux 字符设备驱动开发基础(五)—— ioremap() 函数解析
- react使用less预编译语言和本地代理配置
- eclipse中的一个编译错误修正
- istio组件介绍和启动流程
- Linux服务之DNS服务篇
- springboot连接mysql乱码_springboot2.x——接口访问出现中文乱码
- 班级量化考核系统php代码,班级管理量化考核及评分细则
- android 崩溃原因,Android中导致小米系列手机直接崩溃的主要原因。
- Codeforces Round 701 Multiples and Power Differences
- 路由器克隆电脑mac地址,破解电脑连接固定网线ip
热门文章
- java输出GPA,简单的C GPA计算器问题
- 花仙里云课堂知识付费v1.2.25知识付费 教育 直播
- 软硬件学习记录2——通道速率中比特率bps、Bps、波特率含义及换算
- ios 绕过 id 锁
- D:\eclipse-workspace\.metadata\.plugins\org.eclipse.core.resources\.projects
- c语言中的return 0有什么用?
- c++ 调用python错误总结
- JAVA oa 系统模块设计方案
- 2021年广西甘蔗播种面积、产量及进口情况分析:广西甘蔗产量占全国甘蔗总产量的68.56%[图]
- React框架+cesium加载GeoWebCache发布4326WMTS服务的ArcGIS切片图层请求400问题