点到卡包里面卡券使用使用,需要展示卡券使用附近门店,
思路数据库地址表设计通用的区域街道地址表tz_sys_area
字段名称类型备注
area_id bigint 区域id
area_name varchar(32) 区域名称
parent_id bigint 所属父区域id
level int 层级
type char 区域类型0国家1省份直辖市2地市3区县
area_name varchar(32) 区域名称
parent_id bigint 所属父区域id
level int 层级
后台也可以做修改
四级区域地址数据来源我在网上找的json文件然后按照格式倒入到的数据库
门店地址表tz_address
需求实现这里计算距离就需要用到经纬度
需要使用高德地图api接口地理/逆地理编码获取地址经纬度并保存
/** * 地理/逆地理编码 * https://lbs.amap.com/api/webservice/guide/api/georegeo * * @return */ public string addresstolongitude(string address) { string longitude = ""; string urlstring = "?key={key}&address={address}&output=json"; string response = resttemplate.getforobject(apiaction.api_georego_test + urlstring, string.class, apikey, address); if (strutil.isempty(response)) { return null; } jsonobject jsonobject = json.parseobject(response); string code = jsonobject.getstring("infocode"); if (code.equals("10000")) { jsonarray jsonarray = jsonobject.getjsonarray("geocodes"); jsonobject jsonobject1 = (jsonobject) jsonarray.get(0); longitude = jsonobject1.get("location").tostring(); } else { return null; } return longitude; }
使用
private address setlngandlat(address address) { string addr = address.getprovince() + address.getcity() + address.getarea() + address.getaddr(); string longitude = gaodeservice.addresstolongitude(addr); if (strutil.isblank(longitude)) { throw new businessexception("地址经纬度识别识别"); } string lat = longitude.split(",")[1]; string lng = longitude.split(",")[0]; address.setlat(lat); address.setlng(lng); return address; }
mysql根据经纬度计算地址距离当前位置
select ( 6371 * acos( cos(radians(#{lat})) * cos(radians(lat)) * cos(radians(lng) - radians(#{lng})) + sin(radians(#{lat})) * sin(radians(lat)) ) ) as distance from tz_user_addr where addr_id=#{storeaddrid}
以上就是这么利用mysql计算地址经纬度距离实时位置的详细内容。
