数据库地址表设计
通用的区域街道地址表 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 层级

后台也可以做修改

门店地址表 tz_address
image.png

点击并拖拽以移动
需求实现
这里计算距离就需要用到 经纬度
需要使用高德地图 api 接口 地理/逆地理编码获取地址经纬度并保存

/**

 * 地理/逆地理编码 (java项目大全 fhadmin.cn)
 * 
 *
 * @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}

一起发呆
1 声望5 粉丝

Mac/win软件插件素材等资源