文档章节

根据经纬度计算两地间的距离

微尘鉴
 微尘鉴
发布于 2015/09/17 12:58
字数 398
阅读 82
收藏 1
 
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 lat1Str 用户经度
    * @param lng1Str 用户纬度
    * @param lat2Str 商家经度
    * @param lng2Str 商家纬度
    * @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 patm = 2;
       double radLat1 = rad(lat1);
       double radLat2 = rad(lat2);
       double difference = radLat1 - radLat2;
       double mdifference = rad(lng1) - rad(lng2);
       double distance = patm * Math.asin(Math.sqrt(Math.pow(Math.sin(difference / patm), patm)
               + Math.cos(radLat1) * Math.cos(radLat2)
               * Math.pow(Math.sin(mdifference / patm), patm)));
       distance = distance * EARTH_RADIUS;
       String distanceStr = String.valueOf(distance);
       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("116.97265","36.694514","116.597805","36.738024"));

       System.out.println(getAround("117.11811", "36.68484", "13000"));
       //117.01028712333508(Double), 117.22593287666493(Double),
       //36.44829619896034(Double), 36.92138380103966(Double)
   }

}

本文转载自:http://www.yihaomen.com/article/java/593.htm

上一篇: 汉字转大写拼音
下一篇: Spring配置文件
微尘鉴
粉丝 8
博文 80
码字总数 30075
作品 0
海淀
高级程序员
私信 提问
稀奇古怪的函数

glob:读取目录下的所有文件,并且可以使用通配符过滤。 像这样:$fileNames = glob( $dirPath . '*.exe' ); version_compare:版本比较。 像这样:第一个小返回-1,两个相等返回0,第二个大...

自信的水草
2016/11/07
4
0
PHP轻松实现"附近的人"功能,根据IP确定经纬度,根据经纬度计算距离

PHP安装GeoIP扩展和数据库根据IP获取访客所在国家/城市/经纬度等信息 然后就可以用geoiprecordbyname($SERVER['REMOTE_ADDR'])根据用户IP确定经纬度了. 注意:geoiprecordby_name()返回的西经...

eechen
2016/06/04
2.9K
2
php通过经纬度计算距离及其逆运算

有朋友遇到这样一个问题,自己数据库里面有一些商家,需要根据用户提交的地理位置找出一定范围内的商家来返回个用户。解决这个问题有两种思路。 第一种思路,从数据库提取出商家的经纬度,然...

990653058
2015/05/09
0
0
在线地图浏览器--GMap.NET

GMap.NET 是一个强大、免费、跨平台、开源的.NET控件,它在Windows Forms 和WPF环境中能够通过Google, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac等实现寻找路径、地理编码以及地图...

匿名
2012/02/15
29.1K
5
java 实现微信搜索附近人功能

最近给andorid做后台查询数据功能,有一个需求是模仿微信的查找附近人功能。 数据库中存储每个用户的经纬度信息及用户信息,通过当前用户传递过来的经纬度查询这个用户半径N公里以内的用户信...

凯文加内特
2015/09/08
396
2

没有更多内容

加载失败,请刷新页面

加载更多

Java 8 Optional:优雅地避免 NPE

本篇文章将详细介绍 Optional 类,以及如何用它消除代码中的 null 检查。在开始之前首先来看下什么是 NPE,以及在 Java 8 之前是如何处理 NPE 问题的。 空指针异常(NullPointException,简称...

武培轩
21分钟前
1
0
CountDownLatch实现的并发框架

目录结构 package com.**.**.base.support.executor;import lombok.NoArgsConstructor;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;imp......

MR_TE
22分钟前
7
0
学习记录(day06-事件、按键修饰符、计算属性)

[TOC] 1.1 事件修饰符/按键修饰符 vue 通过事件修饰符对dom事件细节进行控制 <标签 @事件.修饰符="函数"></标签>.prevent ---阻止浏览器默认行为.stop ---阻止浏览器事件冒泡.e...

庭前云落
42分钟前
6
0
006-Sigle-基于blockstack去中心化博客

本篇文章主要讲解有关基于Blockstack的Sigle是一个去中心化的博客项目; 官网地址:https://www.sigle.io/ Github地址:https://github.com/pradel/sigle 页面展示: 介绍: A beautiful de...

Riverzhou
49分钟前
17
0
驰骋工作流引擎开发平台属性功能的隐藏显示介绍

关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明 工作流设计 工作流快速开发平台 业务流程管理 bpm工作流系统 java工作流主流框架 自定义...

孟娟
50分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部