• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

定义用户位置类:

MongoDB的二维球体索引支持查询在一个类地球的球面上进行几何计算,以矢量数据对象或者普通坐标对的方式存储数据。

@数据

@NoArgsConstructor

@AllArgsConstructor

@ Document(collection=' user _ location ')

@复合索引(name=' location _ index ',def=' { ' location ' : ' 2d sphere ' } ')

公共类用户位置实现java.io.Serializable{

private static final long serialVersionUID=4508868382007529970 l;

@Id

私有ObjectId id

@索引

私有长userId//用户编号

私有地理视点位置;//x:经度y:纬度

私有字符串地址;//位置描述

列兵龙创建;//创建时间

私长更新;//更新时间

私有Long lastUpdated//上次更新时间

}

 业务一:上报地理位置

前端会传递用户地理位置信息

/**

* 上报地理位置

* @param map

* @返回

*/

@PostMapping('/location ')

公共响应实体saveLoca(@请求正文映射映射){

两倍经度=Double.valueOf(map.get('经度')。toString());

双倍纬度=双倍。(地图的值。get('纬度').toString());

String addrStr=map.get('addrStr ').toString();

baiduService.update(经度,纬度,addrStr);

返回响应实体。ok(空);

}

保存信息到数据库数据库

@覆盖

公共布尔saveLoca(双经度,双纬度,String addrStr,Long userId) {

尝试{

//查询用户地址

查询查询=查询。查询(标准。where(' userId ').is(userId));

用户位置location=mongo模板。找一个(查询,用户位置。类);

//进行判断

如果(地点!=null) {

//更新

更新更新=更新。更新('位置',新GeoJsonPoint(经度,纬度))。set('address ',addrStr).set('lastUpdated ',location.getUpdated())。设置('更新',系统。当前时间毫秒());

mongotemplate。先更新(查询,更新,用户位置。类);

}否则{

//保存

location=新用户位置();

位置。设置地址(addrStr);

位置。集合已创建(系统。当前时间毫秒());

位置。setlast已更新(系统。当前时间毫秒());

位置。设置更新(系统。当前时间毫秒());

location.setUserId(用户标识);

位置。设置位置(新GeoJsonPoint(经度,纬度));

mongoTemplate.save(位置);

}

返回真实的

} catch(异常异常){

例外。printstacktrace();

返回错误的

}

}

  业务二:查询附近的人

根据传递过来的信息进行查询

/**

* 获取周边陌生人

* @param性别

* @param距离

* @返回

*/

@GetMapping('/search ')

公共响应实体搜索(字符串性别,

@ request param(默认值=' 1000 ')字符串距离){

ListNearUserVo靠近用户vos=tanhuaservice。查询附近(性别,距离);

返回响应实体。ok(nearUserVos);

}

根据条件进行查询

/**

* 查询周围人

* @param距离

* @返回

*/

@覆盖

公共列表长查询(字符串距离,长用户Id) {

//获取当前用户位置

查询查询=查询。查询(标准。where(' userId ').is(userId));

用户位置location=mongo模板。找一个(查询,用户位置。类);

//按条件查询周边

if (location==null){

返回空

}

//设置圆心

GeoJsonPoint点=位置。获取位置();

//设置半径

距离r=新距离(Double.valueOf(距离)/1000,度量。公里);

//画圆

圆圈圆圈=新圆(点,r);

//查询

查询qu2=查询。查询(标准。哪里(“位置”).球内(圆));

ListUserLocation list=mongotemplate。查找(qu2,用户位置。类);

//返回编号集合

返回CollUtil.getFieldValues(list,' userId ',long。类);

}

Link to comment
Share on other sites