您的位置:首页 > 编程语言 > Go语言

MongoTemplate数组查询

2018-02-08 20:18 363 查看
/**
* 按时间范围、最大最小经纬度检索(矩形查询)
*
* @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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: