Mongodb 保存地理信息 并实现范围检索

1.添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.0.0.RELEASE</version>

</dependency>
2.保存地理信息
一、引入mongoTemplate
模板主要封装了包括保存、创建索引,查询的功能。
@Resource
private MongoTemplate mongoTemplate;
 我这里读取的是Excel 文件,将数据信息封装到一个对象里面。
注意在对象中添加一个geo 的map字段必须叫geo
在保存geo 的时候封装了一个方法
private Map getGeoJson(Double lon, Double lat) {
Map<String, Object> map = new HashMap<>(20);
map.put("lng", lon);
map.put("lat", lat);
return map;
}
二、创建索引
为collection创建索引
private void makeSpatialIndexs() {
mongoTemplate.getCollection("coordinates").createIndex(new BasicDBObject("geo", "2d"), "geo_2d");
}
三、保存
mongoTemplate.save(coordinates);
四、保存后的信息

 

3、检索附近几百米的设备信息
private final double r = 6.2137119 / 3963.2 / 10;
@Override
public List<XX> getDeviceList(double longitude, double latitude, double radius) {
double radius2 = r * radius;
List<XX> list = new ArrayList<>();
try {
Point point1 = new Point(longitude, latitude);
Sphere sphere = new Sphere(point1, radius2);
List<YY> positions = mongoTemplate.find(new Query(Criteria.where("geo").within(sphere)), YY.class);
} catch (MongoException e) {
logger.error(e.getMessage());
}
return list;
}
XX:为你向前端返回的实体
YY:为mongodb保存的实体 

转载于:https://www.cnblogs.com/cxdxm/p/9509908.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值