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客户端