使用Mysql计算地址的经纬度距离和实时位置信息


Posted in MySQL onApril 29, 2022

前言

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

使用Mysql计算地址的经纬度距离和实时位置信息

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

思路

数据库地址表设计

  • 通用的区域街道地址表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 层级

使用Mysql计算地址的经纬度距离和实时位置信息

后台也可以做修改

使用Mysql计算地址的经纬度距离和实时位置信息

四级区域地址数据来源我在网上找的json文件然后按照格式倒入到的数据库

  • 门店地址表tz_address

使用Mysql计算地址的经纬度距离和实时位置信息

需求实现

  • 这里计算距离就需要用到经纬度

需要使用高德地图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计算地址经纬度距离实时位置的文章就介绍到这了!


Tags in this post...

MySQL 相关文章推荐
多表查询、事务、DCL
Apr 05 MySQL
详解Mysql 函数调用优化
Apr 07 MySQL
MySQL创建高性能索引的全步骤
May 02 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
MySQL配置主从服务器(一主多从)
Aug 07 MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 MySQL
MySQL笔记 —SQL运算符
Jan 18 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
如何创建一个创建MySQL数据库中的datetime类型
Mar 21 MySQL
浅谈MySQL中的六种日志
Mar 23 MySQL
MySQL表锁、行锁、排它锁及共享锁的使用详解
Apr 02 MySQL
mysql查询结果实现多列拼接查询
Apr 03 MySQL
解决Mysql中的innoDB幻读问题
Apr 29 #MySQL
详解Mysq MVCC多版本的并发控制
详解Mysql事务并发(脏读、不可重复读、幻读)
MySQL 条件查询的常用操作
Apr 28 #MySQL
mysql 子查询的使用
Apr 28 #MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 #MySQL
优化Mysql查询的示例
Apr 26 #MySQL
You might like
openPNE常用方法分享
2011/11/29 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
python检测远程服务器tcp端口的方法
2015/03/14 Python
Python实现多线程抓取妹子图
2015/08/08 Python
python实现多进程代码示例
2018/10/31 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
什么是继承
2013/12/07 面试题
环境工程专业个人求职信
2013/12/05 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
临床医师个人自我评价
2014/04/06 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
单位考核鉴定意见
2015/06/05 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
php字符串倒叙
2021/04/01 PHP
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android
Flask response响应的具体使用
2021/07/15 Python
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers