设为首页收藏本站
开启辅助访问
切换到宽版

创星网络[分享知识 传递快乐]

 找回密码
 立即注册

QQ登录

只需一步,快速开始

用新浪微博登录

只需一步,快速搞定

搜索
查看: 4698|回复: 0
打印 上一主题 下一主题

根据经纬度和半径计算经纬度范围

[复制链接]

我玩的应用:

跳转到指定楼层
楼主
发表于 2012-12-12 22:18:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. public class LatLonUtil {
  2.         
  3.         private static final double PI = 3.14159265;
  4.     private static final double EARTH_RADIUS = 6378137;
  5.     private static final double RAD = Math.PI / 180.0;

  6.     //@see http://snipperize.todayclose.com/snippet/php/SQL-Query-to-Find-All-Retailers-Within-a-Given-Radius-of-a-Latitude-and-Longitude--65095/
  7.         //The circumference of the earth is 24,901 miles.
  8.     //24,901/360 = 69.17 miles / degree  
  9.     /**
  10.      * @param raidus 单位米
  11.      * return minLat,minLng,maxLat,maxLng
  12.      */
  13.     public static double[] getAround(double lat,double lon,int raidus){
  14.                
  15.                 Double latitude = lat;
  16.                 Double longitude = lon;
  17.                
  18.                 Double degree = (24901*1609)/360.0;
  19.                 double raidusMile = raidus;
  20.                
  21.                 Double dpmLat = 1/degree;
  22.                 Double radiusLat = dpmLat*raidusMile;
  23.                 Double minLat = latitude - radiusLat;
  24.                 Double maxLat = latitude + radiusLat;
  25.                
  26.                 Double mpdLng = degree*Math.cos(latitude * (PI/180));
  27.                 Double dpmLng = 1 / mpdLng;
  28.                 Double radiusLng = dpmLng*raidusMile;
  29.                 Double minLng = longitude - radiusLng;
  30.                 Double maxLng = longitude + radiusLng;
  31.                 //System.out.println("["+minLat+","+minLng+","+maxLat+","+maxLng+"]");
  32.                 return new double[]{minLat,minLng,maxLat,maxLng};
  33.         }
  34.    
  35.     /**
  36.      * 根据两点间经纬度坐标(double值),计算两点间距离,单位为米
  37.      * @param lng1
  38.      * @param lat1
  39.      * @param lng2
  40.      * @param lat2
  41.      * @return
  42.      */
  43.     public static double getDistance(double lng1, double lat1, double lng2, double lat2)
  44.     {
  45.        double radLat1 = lat1*RAD;
  46.        double radLat2 = lat2*RAD;
  47.        double a = radLat1 - radLat2;
  48.        double b = (lng1 - lng2)*RAD;
  49.        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
  50.         Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
  51.        s = s * EARTH_RADIUS;
  52.        s = Math.round(s * 10000) / 10000;
  53.        return s;
  54.     }
  55.         
  56.         public static void main(String[] args){
  57.                 Double lat1 = 34.264648;
  58.                 Double lon1 = 108.952736;
  59.                
  60.                 int radius = 1000;
  61.                 //[34.25566276027792,108.94186385411045,34.27363323972208,108.96360814588955]
  62.                 getAround(lat1,lon1,radius);
  63.                
  64.                 //911717.0   34.264648,108.952736,39.904549,116.407288
  65.                 double dis = getDistance(108.952736,34.264648,116.407288,39.904549);
  66.                 System.out.println(dis);
  67.         }
  68. }
复制代码
一共有两个方法

第一个是 根据提供的经度和纬度、以及半径,取得此半径内的最大最小经纬度
第二个就是根据提供的两个经纬度计算距离

from:http://go.cxweb.com.cn/bxq-x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|创星网络 ( 苏ICP备11027519号|网站地图  

GMT+8, 2024-9-22 07:27 , Processed in 0.072042 second(s), 24 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表