qweewq123qwe 发表于 2018-10-25 10:56:09

基于mongodb的地理检索实现

public CarPointNearResult geoNearCarPoint(CarPointNearQuery carPointNearQuery) {  
    CarPointNearResult carPointNearResult = new CarPointNearResult();
  
    if(carPointNearQuery != null && carPointNearQuery.getLongitude() != 0.0D && carPointNearQuery.getLatitude() != 0.0D) {
  
      Point point = new Point(carPointNearQuery.getLongitude(), carPointNearQuery.getLatitude());
  
      NearQuery near = NearQuery.near(point, Metrics.KILOMETERS);
  
      Query query = new Query();
  
      //数量
  
      query.limit(carPointNearQuery.getCount() == 0?100:carPointNearQuery.getCount());
  
      near.query(query);
  
      //距离
  
      near.maxDistance(new Distance(carPointNearQuery.getDistance() == 0.0D?1.0D:carPointNearQuery.getDistance(), Metrics.KILOMETERS));
  
      near.spherical(true);
  
      //调用DAO层,获取数据
  
      GeoResults geoResults = this.carPointDao.geoNear(near, CarPoint.class, "carPoint");
  

  
      carPointNearQuery.setCount(geoResults.getContent().size());
  
      carPointNearQuery.setDistance(near.getMaxDistance().getValue());
  
      carPointNearResult.setCarPointNearQuery(carPointNearQuery);
  
      List geoResultsContent = geoResults.getContent();
  
      ArrayList resultsList = new ArrayList();
  
      Iterator i$ = geoResultsContent.iterator();
  
      while(i$.hasNext()) {
  
            GeoResult geoResult = (GeoResult)i$.next();
  
            CarPointResult carPointResult = new CarPointResult();
  
            carPointResult.setDistance(geoResult.getDistance().getValue());
  
            carPointResult.setCarPoint((CarPoint)geoResult.getContent());
  
            resultsList.add(carPointResult);
  
      }
  

  
      carPointNearResult.setCarPointList(resultsList);
  
      return carPointNearResult;
  
    } else {
  
      logger.error("geoNear 参数异常");
  
      carPointNearResult.setErrorCode(ErrorCode.PARAM_ERROR);
  
      return null;
  
    }
  
}


页: [1]
查看完整版本: 基于mongodb的地理检索实现