如何利用Mysql计算地址经纬度距离实时位置

吾爱主题 阅读:146 2024-04-01 23:25:06 评论:0

前言

最近在做项目时候,遇到一个这样子的需求,

点到卡包里面卡券使用使用,需要展示卡券使用附近门店,

思路

数据库地址表设计

  • 通用的区域街道地址表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接口地理/逆地理编码获取地址经纬度并保存

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 /**      * 地理/逆地理编码      * 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;     }

使用

?
1 2 3 4 5 6 7 8 9 10 11 12 13 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根据经纬度计算地址距离当前位置
?
1 2 3 4 5 6 7 8 9 10 11 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计算地址经纬度距离实时位置的文章就介绍到这了,更多相关Mysql计算地址经纬度内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7090888400395304996

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容