论坛首页 Java企业应用论坛

关于经纬度算法。急求

浏览 10554 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-03-05  

我的数据库里有N多个地点的数据。有相对应的经纬度。数据格式如下:
经度:73.821474 纬度:-31.820520
经度:73.825800 纬度:-31.820020
经度:73.828844 纬度:-31.820002
经度:73.822522 纬度:-31.820201
经度:73.823124 纬度:-31.826201
经度:73.826741 纬度:-31.820038
现在请求得到的一个经纬度,比如: 经度:73.828844 纬度:-31.820002
那我如何根据这个经纬度去计算在他周围1公里内的经纬度呢?
求解。
数据库的数据如图
 

  • 大小: 12.2 KB
   发表时间:2012-03-05  
有个思路:
想象地球是一个绝对圆球体,那么对于某个经纬度,也就是球上面的一个点,要求该点一公里内的经纬度,就是求另外一点离这点之间的距离小于一公里。

这个模型就是在求球面上两点之间的距离了。然后百度一下计算公式就好了。
0 请登录后投票
   发表时间:2012-03-06  
使用mongodb吧,里面有你需要的功能
0 请登录后投票
   发表时间:2012-03-06   最后修改:2012-03-06
转换为“求地球表面上两个点之间的距离”

http://wenku.baidu.com/view/93b45a1efad6195f312ba641.html 第二页。
0 请登录后投票
   发表时间:2012-03-06  
转成墨卡托坐标在转回来算了
0 请登录后投票
   发表时间:2012-03-06  
如果不需要精确,可以找到一个固定的大概参数 x度/米,剩下的你该明白了,将距离换算成度,按照平面方式求解。
0 请登录后投票
   发表时间:2012-03-06  
select * from AAA
where
((111120 * 57.295781) * Math.Acos((Math.Sin(dLatitude*0.017453292) * Math.Sin(31.78888*0.017453292)) + ((Math.Cos(dLatitude*0.017453292) * Math.Cos(31.78888*0.017453292)) * Math.Cos(73.33333 - dLongitude))))<1000;

大概是这个意思,如果写个function应该更方便
0 请登录后投票
   发表时间:2012-03-07  
jts  
0 请登录后投票
   发表时间:2012-03-07  
按照平面算的
0 请登录后投票
   发表时间:2012-03-07  
最简单的办法其实就是±1公里的方法获取一个正方形就可以了,没有必要非要是个圆
经纬度和公里数有换算的方法,最明显的是google地图。小数点后第二位就是公里
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics