java代码实现呢
时间: 2024-02-20 20:56:01 浏览: 56
以下是使用Java代码实现根据当前位置获取与所有门店距离的示例代码,需要使用Jedis库连接Redis:
```java
import redis.clients.jedis.GeoCoordinate;
import redis.clients.jedis.GeoRadiusResponse;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.geo.GeoRadiusParam;
import java.util.List;
public class StoreLocator {
private static final double EARTH_RADIUS_KM = 6371.01;
// 计算两个经纬度之间的距离(单位:千米)
private static double haversine(GeoCoordinate loc1, GeoCoordinate loc2) {
double lat1 = loc1.getLatitude();
double lon1 = loc1.getLongitude();
double lat2 = loc2.getLatitude();
double lon2 = loc2.getLongitude();
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
* Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return EARTH_RADIUS_KM * c;
}
public static void main(String[] args) {
// 连接Redis
Jedis jedis = new Jedis("localhost");
// 添加门店信息到Redis Geo
jedis.geoadd("stores", 116.405285, 39.904989, "store1");
jedis.geoadd("stores", 116.418261, 39.921984, "store2");
jedis.geoadd("stores", 116.423904, 39.914101, "store3");
// 获取当前位置的经纬度信息
List<GeoCoordinate> location = jedis.geopos("stores", "current_location");
// 计算当前位置与所有门店之间的距离,并获取门店的经纬度信息
List<GeoRadiusResponse> storesInfo = jedis.georadiusByMember("stores", "current_location", 10,
GeoUnit.KM, GeoRadiusParam.geoRadiusParam().withCoord());
// 计算当前位置与门店之间的距离
for (GeoRadiusResponse store : storesInfo) {
if (!store.getMemberByString().equals("current_location")) { // 排除当前位置本身
double distance = haversine(location.get(0), store.getCoordinate());
System.out.println(store.getMemberByString() + " " + distance + " km");
}
}
// 关闭连接
jedis.close();
}
}
```
其中,`haversine`方法用于计算两个经纬度之间的距离,`main`方法用于执行搜索操作。在实际使用中,需要将`current_location`替换为实际的当前位置信息。
阅读全文