Spring MongodbTemplate 查找10公里范围内的目标(以车辆为例)

Mongodb官网参考地址:https://docs.mongodb.com/manual/core/geospatial-indexes/#calculation-of-geohash-values-for-2d-indexe

1.配置Spring 和mongodb的集成环境 mongodb-config.xml  MongoTemplate


public List<CarPosition> getPosition(CarPosition carPosition) {
 
	//double x = 110, y = 38;
	double x = carPosition.getLng(), y = carPosition.getLat();
	Point point = new Point(x, y);
	//6.2137119 / 3963.2为10公里范围,6.2137119是英里=10公里
	Sphere sphere = new Sphere(point, 6.2137119 / 3963.2);
	List<CarPosition> positions = mongoTemplate.find(new Query(Criteria.where("locs").within(sphere)), CarPosition.class);
		
	return positions ;

sql:

db.<collection>.find( { locs : { $geoWithin :
                                 { $centerSphere :
                                    [ [ 88 , 30 ] , 10 / 3963.2 ]
                      } } } )

计算距离需先给定单位,然后设置距离

 //返回公里 (球面计算)  10公里
db.runCommand( { geoNear: "driverCarPosition", near: [  113.931324 , 22.538212 ], spherical: true, distanceMultiplier: 6371, maxDistance:10/6371, distanceField:"distance"  })

//返回公里 (2d计算) 10公里
db.runCommand( { geoNear: "driverCarPosition", near: [  113.931324 , 22.538212 ], distanceMultiplier: 111, maxDistance:10/111, distanceField:"distance"  })

//返回米(球面计算 2dsphere) 2500 米
db.runCommand( { geoNear: "driverCarPosition", near: [  113.931324 , 22.538212 ], spherical: true, distanceMultiplier: 6378137,maxDistance:2500/6378137, distanceField:"distance"  })

//返回米(2d 计算) 2500米
db.runCommand( { geoNear: "driverCarPosition", near: [  113.931324 , 22.538212 ], distanceMultiplier: ?,maxDistance:2500/?, distanceField:"distance"  })

5.mongodb中建立2d索引,这里使用的是Robomong客户端

猜你喜欢

转载自blog.csdn.net/liyantianmin/article/details/82693998