Java spring数据mongo地理空间查询

Java spring数据mongo地理空间查询,java,mongodb,spring-boot,spring-data,Java,Mongodb,Spring Boot,Spring Data,我一直在尝试使用地理空间查询将数据提取到pojo中,但没有成功 下面是我的monogdb集合中的一个示例数据 { "_id" : ObjectId("597b8c9a21871eeabd5a1cf5"), "amb_id" : 10, "amb_number" : "KL25 8945", "driver_name" : "Amal Shaji", "driver_licence_id" : "12/4562/2017", "ownership"

我一直在尝试使用地理空间查询将数据提取到pojo中,但没有成功

下面是我的monogdb集合中的一个示例数据

{
    "_id" : ObjectId("597b8c9a21871eeabd5a1cf5"),
    "amb_id" : 10,
    "amb_number" : "KL25 8945",
    "driver_name" : "Amal Shaji",
    "driver_licence_id" : "12/4562/2017",
    "ownership" : "Amrita Institute of Medical Science",
    "ownership_address" : "Peeliyadu Road, Ponekkara, Edappally, Ernakulam",
    "location" : {
        "type" : "Point",
        "coordinates" : [
            76.293485,
            10.032871
        ]
    }
}
下面的mongo查询在mongoshell中工作得非常好

 db.trial.find( 
  { location : 
  { $near :{ 
    $geometry :{  
      type : "Point" ,  
      coordinates : [ 76.2 , 9.9 ] } ,
      $maxDistance : 20000            }
      } 

  } 
  )
  .pretty();
这是我一直试图获取数据的pojo

@Document(collection = "trial")
    public class Ambulance {
        @Id
        String id;
        @Field("amb_id")
        String ambulanceId;
        @Field("amb_number")
        String licensePlateNumber;
        @Field("driver_name")
        String driverName;
        @Field("driver_licence_id")
        String driverLicenseNumber;
        @Field("ownership")
        String ownerShip;
        @Field("ownership_address")
        String ownerShipAddress;
        @GeoSpatialIndexed(name="Location")
        Double[] location;

        //setters and getters
   }
这是我一直在使用的存储库

@ComponentScan
@Repository
public interface AmbulanceRepo extends MongoRepository<Ambulance, String> {
  GeoResults<Ambulance> findByLocationNear(Point p, Distance d);
}
@ComponentScan
@存储库
公共接口AmbuncePO扩展了MongoRepository{
地理结果:定位线(点p,距离d);
}
和控制器

@RestController
@CrossOrigin(origins = "http://localhost:4200")
@RequestMapping("/")
public class NearbyAmbulanceController {

    private AmbulanceRepo ambulanceRepo;

    @Autowired
    public NearbyAmbulanceController(AmbulanceRepo repo){
        this.ambulanceRepo = repo;
    }

    @RequestMapping(value="/nearbyAmbulance",method = RequestMethod.POST)
    @ResponseBody
    public GeoResults<Ambulance> getAmbulanceDetails(
            @RequestBody LocationRequest locationRequest){
        System.out.println("lati "+locationRequest.getLatitude()+ " long "+locationRequest.getLongitude()+" d "+locationRequest.getDistance());
//        List<Ambulance> ambulanceList=this.ambulanceRepo.findByLocationNear(new Point(Double.valueOf(locationRequest.getLongitude()),Double.valueOf(locationRequest.getLatitude())),new Distance(locationRequest.getDistance(), Metrics.KILOMETERS));
        Point point = new Point(locationRequest.getLatitude(), locationRequest.getLongitude());
        Distance distance = new Distance(locationRequest.getDistance(), Metrics.KILOMETERS);
        GeoResults<Ambulance> ambulanceList=this.ambulanceRepo.findByLocationNear(point,distance);
        System.out.println(ambulanceList);
        return ambulanceList;
    }
}
@RestController
@交叉原点(原点=”http://localhost:4200")
@请求映射(“/”)
公共类近距离救护车控制器{
私人救护车;
@自动连线
公共近距离救护车控制员(救护车紧急救援){
这个。epo=回购;
}
@RequestMapping(value=“/nearby救护车”,method=RequestMethod.POST)
@应答器
公共GeorgeSults GetAmbunceDetails(
@请求主体位置请求位置请求){
System.out.println(“lati”+locationRequest.getLatitude()+“long”+locationRequest.getLongitude()+“d”+locationRequest.getDistance());
//List AmbunceList=this.AmbuncePO.FindBylocationner(新点(Double.valueOf(locationRequest.GetLength())、Double.valueOf(locationRequest.getLatitude())、新距离(locationRequest.getDistance()、Metrics.km));
Point Point=新点(locationRequest.getLatitude(),locationRequest.getLatitude());
距离距离=新距离(locationRequest.getDistance(),Metrics.km);
GeorgeSults AmbunceList=此.Ambuncepo.FindBylocationerar(点,距离);
系统输出打印LN(救护车名单);
返回救护车名单;
}
}

每次我尝试都没有结果。我确信我在给定的点和附近的位置有数据,我甚至能够使用mongoshell获取这些数据。我觉得问题在于我在实体中注释位置字段的方式。有什么我遗漏的吗?任何帮助都将被告知

mongodb中似乎有多个数据库的集合名为“试用”。我试着移除所有这些,现在效果很好。Spring数据无法确定要查询哪个集合,因为不同数据库中有多个同名集合。希望这对某人有所帮助,因为我在这上面浪费了几天时间。

似乎mongodb中有多个数据库的集合名为“试用”。我试着移除所有这些,现在效果很好。Spring数据无法确定要查询哪个集合,因为不同数据库中有多个同名集合。希望这对某人有所帮助,因为我在这上面浪费了几天时间。

Spring MongoDb地理空间查询:它经过了很好的测试

   public List<MachineDetails> searchbylocation(String lat, String longt, String maxDistance) {
            BasicQuery query1 = new BasicQuery("{geoLocation:{ $near: { $geometry: { type: 'Point',coordinates: ["+ lat+","+ longt+" ] }, $minDistance: 10, $maxDistance: "+maxDistance+"}}}");

            List<MachineDetails> venues1 = mtemplate.find(query1, MachineDetails.class);

return venues1;
}
public List searchbylocation(字符串lat、字符串long、字符串maxDistance){
BasicQuery query1=新的BasicQuery({地理位置:{$near:{$geometry:{$type:'Point',坐标:[“+lat+”,“+longt+”]},$minDistance:10,$maxDistance:“+maxDistance+”}}”);
List-venues1=mtemplate.find(query1,machinedeails.class);
返回通道1;
}

Spring MongoDb地理空间查询:经过良好测试

   public List<MachineDetails> searchbylocation(String lat, String longt, String maxDistance) {
            BasicQuery query1 = new BasicQuery("{geoLocation:{ $near: { $geometry: { type: 'Point',coordinates: ["+ lat+","+ longt+" ] }, $minDistance: 10, $maxDistance: "+maxDistance+"}}}");

            List<MachineDetails> venues1 = mtemplate.find(query1, MachineDetails.class);

return venues1;
}
public List searchbylocation(字符串lat、字符串long、字符串maxDistance){
BasicQuery query1=新的BasicQuery({地理位置:{$near:{$geometry:{$type:'Point',坐标:[“+lat+”,“+longt+”]},$minDistance:10,$maxDistance:“+maxDistance+”}}”);
List-venues1=mtemplate.find(query1,machinedeails.class);
返回通道1;
}