MongoTemplate数组查询

/**
     * 按时间范围、最大最小经纬度检索(矩形查询)
     * 
     * @param timeRange
     *            开始时间,结束时间中间逗号隔开,必填 yyyyMMddHH
     * @param lat
     *            纬度,可选
     * @param lon
     *            经度,可选
     * @param vars
     *            要素,如pre_3h、u、v、snow_3h、tem_max、tem_min、temp
     * @return
     * @throws ParseException
     */
    public List<RefineGridPoint243> getRefineGridPoint243InAreaByTimeRange(String timeRange,
            double maxLon, double maxLat, double minLon, double minLat, String vars)throws ParseException {
        String[] times = timeRange.split(",");
        DBObject dbObject = new BasicDBObject();
        if (times.length > 1) {
            dbObject.put("qbtime", new BasicDBObject("$gte", times[0]).append("$lte", times[1]));
        } else {
            dbObject.put("qbtime", new BasicDBObject("$gte", timeRange).append("$lte", timeRange));
        }
        if (vars != null) {
            String[] var = vars.split(",");
            dbObject.put("var", new BasicDBObject("$in", var));
        }
        int[] maxnum = GRB2ParseUtil.getIndex(maxLat, maxLon);
        int[] minnum = GRB2ParseUtil.getIndex(minLat, minLon);
        if (maxnum != null&&minnum!=null) {
            dbObject.put("lat", new BasicDBObject("$gte", minnum[0]).append("$lte", maxnum[0]));
        }
        Query query = new BasicQuery(dbObject, null);
        if (maxnum != null&&minnum!=null) {
            query.fields().slice("value", minnum[1], maxnum[1]-minnum[1]+1);
        }
        return mongoTemplate.find(query, RefineGridPoint243.class, "RefineGridPoint243");
    }
private static final double interval = 0.05;// 经纬度间隔
    public static final double minLat = 34.25;
    public static final double maxLat = 38.55;
    public static final double maxLon = 122.80;
    public static final double minLon = 114.65;

    public static int[] getIndex(double lat, double lon) {
        if (lat >= minLat && lat <= maxLat && lon >= minLon && lon <= maxLon) {
            double latnum = (lat - minLat) / interval;
            double lonnum = (lon - minLon) / interval;
            return new int[] { (int) Math.rint(latnum), (int) Math.rint(lonnum) };
        }
        return null;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值