inhv
2014-02-13 14:44:47
【LBS】移动互联网基于LBS地理位置应用java开发必备
功能:计算两个点(经纬度坐标)之间的距离
使用示例:
double distance = LatLng.distance(113.926496000000000, 22.538393000000000, 114.23, 22.23);
01 | package com.haohui.util; |
02 |
03 | /** |
04 | * 计算两个经纬度之间的距离的工具类 |
05 | * |
06 | * Feb 13, 2014 |
07 | * @author ZhihaoChen |
08 | */ |
09 | public class LatLng { |
10 | private static double lngPerMeter = 1 .E-005D; |
11 |
12 | public double getLat( double _curLat, int _radius) { |
13 | return _radius * lngPerMeter; |
14 | } |
15 |
16 | public double getLng( int _radius) { |
17 | return _radius * lngPerMeter; |
18 | } |
19 |
20 | /** |
21 | * 计算两个经纬度之间的距离 |
22 | * |
23 | * @param _lng1 |
24 | * @param _lat1 |
25 | * @param _lng2 |
26 | * @param _lat2 |
27 | * @return |
28 | */ |
29 | public static double distance( double _lng1, double _lat1, double _lng2, |
30 | double _lat2) { |
31 | if ((_lng1 == 0 .0D) || (_lat1 == 0 .0D) || (_lng2 == 0 .0D) |
32 | || (_lat2 == 0 .0D)) { |
33 | return 0 .0D; |
34 | } |
35 | double rad_lat1 = Rad(_lat1); |
36 | double rad_lat2 = Rad(_lat2); |
37 | double a = rad_lat1 - rad_lat2; |
38 | double b = Rad(_lng1) - Rad(_lng2); |
39 | double s = 2 .0D * Math.asin(Math.sqrt(Math |
40 | .pow(Math.sin(a / 2 .0D), 2 .0D) |
41 | + Math.cos(rad_lat1) |
42 | * Math.cos(rad_lat2) |
43 | * Math.pow(Math.sin(b / 2 .0D), 2 .0D))); |
44 | s *= 6378137 .0D; |
45 | s = Math.round(s * 10000 .0D) / 10000L; |
46 | return s; |
47 | } |
48 |
49 | private static double Rad( double _d) { |
50 | return _d * 3 .141592653589793D / 180 .0D; |
51 | } |
52 | |
53 | } |
由AXIN编辑于2014-2-13 16:40:34
猜你喜欢
请下载代码后再发表评论



123456dswhdm LV2
2022年9月1日
super_he LV17
2022年5月13日
dasen2022 LV6
2022年4月27日
jdndbh LV6
2021年12月10日
newbag LV9
2021年8月9日
HelloWorld088
2021年4月19日
暂无贡献等级
Killah LV9
2021年4月16日
1470299983
2021年2月13日
暂无贡献等级
小五12345 LV13
2021年1月4日
JoeJie LV6
2020年9月4日