解决此问题的关键是要理解空间几何模型,在理解空间几何模型的基础上再利用数学公式求取两点之间的值。其解决步骤如下:

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根据两点的经纬度来计算之间的距离相关推荐

  1. pythongps距离_在Python中求两个gps点之间的距离

    我有下面的方法(haversine)返回两个gps点之间的距离.下表是我的数据帧.在 当我使用在dataframe上应用函数时,我得到错误"cannot convert the series ...

  2. java 计算弧度_java中角度或弧度的计算

    math中调用tan()的反三角函数. 应该表达为 (角度/180度)* π(3.14)= Math.atan((dpPoint.y-dpCenter.y) / (dpPoint.x-dpCenter ...

  3. matlab利用经纬度计算距离,MATLAB函数可计算两个坐标(纬度和经度)之间的距离...

    How can I calculate distance between two world map coordinates (latitude and longitude) using MATLAB ...

  4. 4字节 经纬度_java 获取本机经纬度

    package com.smm.web.mtower.util; import java.io.BufferedReader; import java.io.IOException; import j ...

  5. java多个类调用_JAVA问题总结之15-多个类之间的调用

    JAVA问题总结之15-多个类之间的调用: 代码: package java3; public class test1 { public static void main(String[] args) ...

  6. java 类型转string类型_java常用类String与其他数据类型之间的转化

    1.包装类之间转换 2.包装类对象转换为对应的基本数据类型变量 1. 定义一个String str = "1234"; 2. 将其转换为double类型并输出 3.使用Double ...

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

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

  8. Java代码实现三维立体空间中两点距离的求解

    资源下载地址:https://download.csdn.net/download/sheziqiong/86763912 资源下载地址:https://download.csdn.net/downl ...

  9. 用计算python两点之间的距离math_自学生信Python(第二天)|计算出两点之间的距离...

    计算出两点之间的距离 日常旁白:本人是一枚生物学的学生,由于对生物信息学特别感兴趣,于是想自学生物信息学(新手莫怪).了解到生物信息学要有编程基础,尤其是要会一门编程语言,例如:R语言.Python. ...

最新文章

  1. MPC8313ERDB不新鲜pkg包裹,把文件放进Ramdisk
  2. 读8篇论文,梳理BERT相关模型进展与反思
  3. HttpClient第一章(一)
  4. 排版 项目 html,项目需求讨论: 文字显示排版— Html 格式
  5. 对时域连续信号用matlab离散,数字信号处理上机实验一 离散时间信号的时域分析...
  6. ASP.NET中TextBox控件设置ReadOnly=true后台取不到值
  7. CentOS 5.8 正式发布
  8. javascript保留两位
  9. twitter达人不能不知的缩写
  10. hbase regions_使用Regions ADF 11g进行Master Detail CRUD操作
  11. Linux 字符设备驱动开发基础(五)—— ioremap() 函数解析
  12. react使用less预编译语言和本地代理配置
  13. eclipse中的一个编译错误修正
  14. istio组件介绍和启动流程
  15. Linux服务之DNS服务篇
  16. springboot连接mysql乱码_springboot2.x——接口访问出现中文乱码
  17. 班级量化考核系统php代码,班级管理量化考核及评分细则
  18. android 崩溃原因,Android中导致小米系列手机直接崩溃的主要原因。
  19. Codeforces Round 701 Multiples and Power Differences
  20. 路由器克隆电脑mac地址,破解电脑连接固定网线ip

热门文章

  1. java输出GPA,简单的C GPA计算器问题
  2. 花仙里云课堂知识付费v1.2.25知识付费 教育 直播
  3. 软硬件学习记录2——通道速率中比特率bps、Bps、波特率含义及换算
  4. ios 绕过 id 锁
  5. D:\eclipse-workspace\.metadata\.plugins\org.eclipse.core.resources\.projects
  6. c语言中的return 0有什么用?
  7. c++ 调用python错误总结
  8. JAVA oa 系统模块设计方案
  9. 2021年广西甘蔗播种面积、产量及进口情况分析:广西甘蔗产量占全国甘蔗总产量的68.56%[图]
  10. React框架+cesium加载GeoWebCache发布4326WMTS服务的ArcGIS切片图层请求400问题