没有合适的资源?快使用搜索试试~ 我知道了~
首页利用Java+MySQL实现附近功能实例
利用Java+MySQL实现附近功能实例
447 浏览量
更新于2023-03-03
评论 1
收藏 73KB PDF 举报
现在很多手机软件都用附近搜索功能,但具体是怎么实现的呢?下面这篇文章就来给大家介绍关于利用Java+MySQL实现附近功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
资源详情
资源评论
资源推荐

利用利用Java+MySQL实现附近功能实例实现附近功能实例
现在很多手机软件都用附近搜索功能,但具体是怎么实现的呢?下面这篇文章就来给大家介绍关于利用
Java+MySQL实现附近功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面
来一起看看吧。
前言前言
在移动互联网广泛发展的今天,APP开发成为许多企业进入移动互联网的首选,笔者开发了众多的APP,发现很多app都有这
样一个功能,那就是获取附近的人,怎么样来获取附近的人呢?其实很简单,就是要时刻记录用户的坐标(经纬度)信息到数
据库中,然后根据当前用户的坐标,搜索数据库中,和当前坐标位置在 一定范围内的所有用户。
其实对于那种地理位置不会变的两个主体之间的距离,最好是直接将结果静态化。也就是直接写死在配置里。
比如,找自己家附近的地铁站。
这种情况下,一般而言“家”这个主体是不会轻易“跑来跑去”的。每次查询都计算一次距离没什么意义。最好是直接将距离持久
化后直接查询。
另一种情况:另一种情况:
获取APP用户所在位置附近的地铁站
这种情况下,用户的地理位置是变动的。所以每次都得实时计算实际距离。
实现思路实现思路
将地球当做一个标准的球体,使用球面距离公式来计算球面两点间大圆的弧长。
球面距离
public static double getDistance2(double long1, double lat1, double long2, double lat2) {
lat1 = rad(lat1);
lat2 = rad(lat2);
double a = lat1 - lat2;
double b = rad(long1 - long2);
double sa2 = Math.sin(a / 2.0);
double sb2 = Math.sin(b / 2.0);
return 2 * EARTH_MEAN_RADIUS_KM * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1) * Math.cos(lat2) * sb2 * sb2));
}
知道两点之间的经纬度就可以。
当然,这种计算不得不放在数据库里,然后根据距离排序返回。将上面的公式带入到SQL里就可以。
附近地铁站示例
建地铁站示例表
CREATE TABLE station
(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NULL COMMENT '地铁站名',
lng DOUBLE NULL COMMENT '经度',
lat DOUBLE NULL COMMENT '维度'
);
SQL示例
SET @targetLat = 31.175702;
SET @targetLng = 121.519095;
SELECT
s.id ,
s.name ,
s.lng ,
s.lat ,
ROUND(
6378.138 * 2 * ASIN(
SQRT(
POW(
SIN( ( @targetLat * PI() / 180 - s.lat * PI() / 180 ) / 2 ) , 2 )
+
COS( @targetLat * PI( ) / 180 ) * COS( s.lat * PI( ) / 180 )
* POW( SIN( ( @targetLng * PI() / 180 - s.lng * PI() / 180 ) / 2 ) , 2 )
)
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0