@Override public CommonResult selectshopnear(double dis, double longitude,double latitude) { //先计算查询点的经纬度范围 List<t_shop> tshoplist = null; try { double r = 6371;//地球半径千米 double dlng = 2*Math.asin(Math.sin(dis/(2*r))/Math.cos(latitude*Math.PI/180)); dlng = dlng*180/Math.PI;//角度转为弧度 double dlat = dis/r; dlat = dlat*180/Math.PI; double minlat =latitude-dlat; double maxlat = latitude+dlat; double minlng = longitude -dlng; double maxlng = longitude + dlng; tshoplist = tShopDao.selectshopnear(minlat,maxlat,minlng,maxlng); } catch (Exception e) { e.printStackTrace(); } return new CommonResult(200,"附近商家信息",tshoplist); }
说明 double dis 这个是距离,double longitude 这个是定位的经度,double latitude 这个是定位的纬度。
select shop_id, shop_name, time, contract_state, longitude, latitude, discount, ukey, merch_sub_uid, shop_reviews from t_shop where 1=1 <if test="minlng !=0"> and longitude <![CDATA[ >= ]]> #{minlng} </if> <if test="maxlng !=0"> and longitude <![CDATA[ <= ]]> #{maxlng} </if> <if test="minlat !=0"> and latitude <![CDATA[ >= ]]> #{minlat} </if> <if test="maxlat !=0"> and latitude <![CDATA[ <= ]]> #{maxlat} </if>
查询出来再这个经纬度坐标范围之内的数据,大于小的,小于大的。
这个是把这几个经纬度的最大值和最小值,都计算出来,然后把这个当成查询条件,根据经纬度的坐标查询这个表。 <![CDATA[ <= ]]> 是小于等于的写法。<![CDATA[ >= ]]> 大于等于的写法。