专注JavaWeb开发 首页制式『默认式 OR 时间轴 网站地图|RSS订阅|设为首页|加入收藏
当前位置:首页 >数据库 >NoSQL > 正文

用spring data 查询 MongoDb 空间坐标 范围距离内所有的点

来源: CSDN 作者: 官网 发布时间: 2019-03-21 浏览次数:

解决步骤:首先地图移动触发查询,这个就是不停触发查询事件。

          然后当得到地图的中心坐标点,计算出地图的显示半径(单位米)的时候,需要到mongoDB中把满足的点查询出来。

 最后在地图上表示相关点就可以。

aa:{
...
'loc':[lon,lat],
...
}

 地图移动事件,计算中心坐标(经纬段),地图半径还有显示点网上有很多事例可以找到。

 

 下面说说我碰到的主要的mongo的查询的问题。



 在看过spring data mongo的文档后,发现这个问题竟然可以比较简便的解决。

 以下就是关键代码:

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.data.geo.*;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
 
    //传入的是经度纬度,还有半径(米)
    public RetCode<ArrayList<RealTimeData>> findRealTimeByRange(double latitude, double longitude, double raidus) {
        RetCode rt = new RetCode();
        try {
            ArrayList<RealTimeData> list;
	    //中心点
            Point point = new Point(latitude,longitude);
	    //转换为2dsphere的距离,这一步非常重要
            Distance distance = new Distance(raidus/1000, Metrics.KILOMETERS);
	    //画一个圆
            Circle circle = new Circle(point,distance);
            Date date = Utils.getCurrentTime();
	    //自定义的追加了一个检索时间的查询
            Calendar calendar = Calendar.getInstance();
            Calendar calendar1 = Calendar.getInstance();
            calendar.setTime(date);
            calendar1.setTime(date);
            calendar.add(Calendar.SECOND, -30);
            Date date1 = calendar.getTime();
            Date date2 = calendar1.getTime();
	    //withinSphere 这个可以查询圆内的点
	    //还可以加很多自己想要的条件
            Criteria cc = Criteria.where("loc").withinSphere(circle).and("fametime").gte(date1).lte(date2);
            Query query = new Query(cc);
            list = iBaseDao.query(query, RealTimeData.class, "LatestVehicleData");
            if (list.size() == 0) {
                rt.setCode(0);
                rt.setDesc("数据为空");
            } else {
                rt.setCode(1);
                rt.setObj(list);
            }
        } catch (Exception e) {
            rt.setCode(1001);
            rt.setDesc(e.getMessage());
        }
        return rt;
    }



QQ群: 武汉地区(142173356)验证消息JavaWeb1024

网友共有【】评论,点击查看



x 微信关注我们 随时获取最新网站资讯