Java RedisGeoHash算法的使用以及详解

Java maven工程 操作RedisGeoHash

引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

java代码 看方法注释说明

@Autowired
private RedisTemplate redisTemplate;
/**
* 添加
*
* @param key 键名
* @param precision 精度
* @param dimension 维
* @param name 位置名称
* @return {@link Long}
*/
@PostMapping("/redisGeoAdd")
public Long redisGeoAdd(String key, double precision, double dimension, String name){
return redisTemplate.opsForGeo().add(key,new Point(precision,dimension),name);
}
/**
* 获得经纬度
*
* @param key 键名
* @param nameList 位置名称集合
* @return {@link List<Point>}
*/
@PostMapping("/redisGeoGet/{key}")
public List<Point> redisGeoGet( @PathVariable String key,@RequestBody List<String> nameList){
return redisTemplate.opsForGeo().position(key,nameList.toArray());
}
/**
* 获得两点之间距离
*
* @param key 键名
* @param name1 位置1
* @param name2 位置2
* @return {@link Distance}
*/
@GetMapping("/redisGeoDist")
public Distance redisGeoDist(String key,String name1,String name2){
return redisTemplate.opsForGeo().distance(key,name1,name2, RedisGeoCommands.DistanceUnit.KILOMETERS);
}
/**
* 根据位置名称获得指定距离的位置信息
*
* @param key 键名
* @param name 位置名称
* @param distance 距离
* @param count 数
* @return {@link Object}
*/
@GetMapping("/redisGeoRadius")
public Object redisGeoRadius(String key,String name,Double distance,int count){
RedisGeoCommands.GeoRadiusCommandArgs args;
args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending().limit(count);
return redisTemplate.opsForGeo().radius(key,name,new Distance(distance, Metrics.KILOMETERS),args);
}
/**
* 获得位置geohash表示
*
* @param key 键名
* @param nameList 位置名称
* @return {@link List<String>}
*/
@PostMapping("/redisGeoHash/{key}")
public List<String> redisGeoHash( @PathVariable String key,@RequestBody List<String> nameList){
return redisTemplate.opsForGeo().hash(key,nameList.toArray());
}

java调用百度地图API根据位置名称获得经纬度

这里使用spring的restful风格调用

@Resource
private RestTemplate restTemplate;
String ak="百度ak";
/**
* 根据位置名称获得经纬度
*
* @param address 地址 越详细精度越准确
* @return {@link Object}
*/
@GetMapping("/getXYByName")
public Object getXYByName(String address){
String forObjectToString = restTemplate.getForObject(
"http://api.map.baidu.com/geocoding/v3/?address=" + address + "&output=json&ak=" + ak + "&callback=showLocation ",
String.class
);
JSONObject jsonObject = JSONUtil.parseObj(forObjectToString);
if (jsonObject.getStr("status").equals("0")) {
//成功
JSONObject result = jsonObject.getJSONObject("result");
JSONObject location = result.getJSONObject("location");
Double lng = location.getDouble("lng");
Double lat = location.getDouble("lat");
}
return jsonObject;
}
posted @   勇不停歇  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 数据并发安全校验处理工具类
点击右上角即可分享
微信分享提示