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

【Mongodb|Mongodb 保存地理信息 并实现范围检索】1.添加依赖


org.springframework.boot
spring-boot-starter-data-mongodb
2.0.0.RELEASE


2.保存地理信息
一、引入mongoTemplate
模板主要封装了包括保存、创建索引,查询的功能。

@Resource

private MongoTemplate mongoTemplate;

我这里读取的是Excel 文件,将数据信息封装到一个对象里面。
注意在对象中添加一个geo 的map字段必须叫geo
在保存geo 的时候封装了一个方法

private Map getGeoJson(Double lon, Double lat) {
Map 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);
四、保存后的信息

Mongodb|Mongodb 保存地理信息 并实现范围检索
文章图片


3、检索附近几百米的设备信息

private final double r = 6.2137119 / 3963.2 / 10;

@Override
public List getDeviceList(double longitude, double latitude, double radius) {
double radius2 = r * radius;
List list = new ArrayList<>();
try {
Point point1 = new Point(longitude, latitude);
Sphere sphere = new Sphere(point1, radius2);
List 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

    推荐阅读