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; }