数据库地址表设计公共区域街道地址表tz_sys_area字段名类型备注area_idbigintareaIDarea_namevarchar(32)区域名parent_idbigintparentareaIDlevelintleveltypechar区域类型0国家1省直辖市2市3区县area_namevarchar(32)区名parent_idbigint属于父区IDlevelint。也可以修改背景级别。店铺地址表tz_address可以点击拖动移动需求。这里要实现计算距离,需要用到经纬度。高德地图API接口地理/反向地理编码获取地址经纬度并保存/***地理/反向地理编码(Java项目大全fhadmin.cn)***@return*/publicStringaddressToLongitude(Stringaddress){Stringlongitude="";StringurlString="?key={key}&address={address}&output=JSON";字符串响应=restTemplate.getForObject(ApiAction.API_GEOREGO_TEST+urlString,String.class,apiKey,address);如果(StrUtil.isEmpty(响应)){返回空;}JSONObjectjsonObject=JSON.parseObject(响应);字符串代码=jsonObject.getString("信息代码");if(code.equals("10000")){JSONArrayjsonArray=jsonObject.getJSONArray("地理编码");JSONObjectjsonObject1=(JSONObject)jsonArray.get(0);longitude=jsonObject1.get("location").toString();}else{返回空值;}returnlongitude;}privateAddresssetlngAndLat(Addressaddress){Stringaddr=address.getProvince()+address.getCity()+address.getArea()+address.getAddr();Stringlongitude=gaoDeService.addressToLongitude(addr);if(StrUtil.isBlank(longitude)){thrownewBusinessException("地址经纬度识别");}Stringlat=longitude.split(",")[1];Stringlng=longitude.split(",")[0];地址.setLat(纬度);地址.setLng(lng);returnaddress;}点击拖动移动MySQL根据经纬度计算地址距离当前位置的距离SELECT(6371*acos(cos(radians(#{lat}))*cos(radians(lat))*cos(弧度(lng)-弧度(#{lng}))+sin(radians(#{lat}))*sin(radians(lat))))ASdistanceFROMtz_user_addr其中addr_id=#{storeAddrId}
