私は地理空間クエリを使用して、成功していないpojoにデータを取得しようとしています。ここでspring data mongo geospatial query
は、以下のmongo問合せはこちら
db.trial.find(
{ location :
{ $near :{
$geometry :{
type : "Point" ,
coordinates : [ 76.2 , 9.9 ] } ,
$maxDistance : 20000 }
}
}
)
.pretty();
は、私がデータをフェッチしようとしているPOJOであるmongoshellに完全に正常に動作します私の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
]
}
}
です〜
@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);
}
とコントローラが
@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;
}
}
私はそれをしようとするたびに私は結果を得ることはありません。私は与えられた点と近くの場所にデータがあることを確信しています。そして、私はmongoshellを使ってそれらを取得することさえできました。私は問題がエンティティの位置フィールドに注釈を付けた方法であると感じています。私が紛失しているものはありますか?どんな援助も感謝しています。