zoukankan      html  css  js  c++  java
  • 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保存的实体 
  • 相关阅读:
    胜利大逃亡
    求最小环
    Prime算法
    网站根目录下没有正确的DNT.config文件 (不同类型错误更新中)
    Day4_代码重用与函数
    Day1_算法分析方法
    Day3_字符串操作与正则表达式
    错误解决一_call time passbyreference removed
    Day1_PHP快速入门
    silverlight 动态加载树形菜单[带图标],方法一
  • 原文地址:https://www.cnblogs.com/cxdxm/p/9509908.html
Copyright © 2011-2022 走看看