查询百度地图附近sql

/**

* longitude 经度

* latitude 纬度

*kiloMeters 距离范围限制

**/

public Page browseNearBy(Connection conn, VerbosityEnumverbosity, Double longitude, Double latitude, int kiloMeters, Ordinal sort, int page, int pageSize) throws Exception      

  {
    if (log.isLoggable(Level.FINER))
    {
      log
          .entering(
              GymDAOImpl.class.getName(),
              "browse(Connection conn, VerbosityEnumverbosity, Double longitude, Double latitude, int kiloMeters, Ordinal sort, int page, int pageSize)",
              new Object[] { conn, verbosity, longitude, latitude, kiloMeters, sort, page, pageSize });
    }

    List params = new ArrayList();
    Page gyms = null;
    try
    {
      StringBuilder fromClause =new StringBuilder(128).append(" from ").append(TABLE.nameAndAlias).append(" where 1=1");
      //只对于经度和纬度大于或小于该用户1度(111公里)范围内进行距离计算
      fromClause.append(" and longitude > ? - 1 and longitude < ? + 1 and latitude > ? - 1 and latitude < ? + 1 ");
      params.add(longitude);
      params.add(longitude);
      params.add(latitude);
      params.add(latitude);

      if(kiloMeters > 0)
      {
          fromClause.append("and ACOS(SIN(( ? * 3.1415) / 180 ) *SIN((latitude * 3.1415) / 180 ) +COS((? * 3.1415) / 180 ) * COS((latitude * 3.1415) / 180 ) *COS((? * 3.1415) / 180 - (longitude * 3.1415) / 180 ) ) * 6380 < ? ");
          params.add(latitude);
          params.add(latitude);
          params.add(longitude);
          params.add(kiloMeters);
      }
      StringBuilder selectFragment = new StringBuilder(128).append("select").append(verbosity.getColumnSelectFragment());
      gyms = DB_ADAPTER.browsePage(conn, verbosity, selectFragment.toString(), fromClause.toString(), sort.sortWithAlias(null), params.toArray(), page, pageSize);
      return gyms;
    }
    finally
    {
      if (log.isLoggable(Level.FINER))
      {
        log
            .exiting(
                GymDAOImpl.class.getName(),
                "browse(Connection conn, VerbosityEnumverbosity, Double longitude, Double latitude, int kiloMeters, Ordinal sort, int page, int pageSize)"
                );
      }
    }
  }

你可能感兴趣的:(数据库)