使用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 相关文章推荐
mysq启动失败问题及场景分析
Jul 15 MySQL
浅谈MySQL表空间回收的正确姿势
Oct 05 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
一文带你探究MySQL中的NULL
Nov 11 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
VS2019连接MySQL数据库的过程及常见问题总结
Nov 27 MySQL
SQL基础查询和LINQ集成化查询
Jan 18 MySQL
关于k8s环境部署mysql主从的问题
Mar 13 MySQL
MySQL学习必备条件查询数据
Mar 25 MySQL
Windows下载并安装MySQL8.0.x 版本的完整教程
Apr 10 MySQL
MySql重置root密码 --skip-grant-tables
Apr 11 MySQL
MySQL中的全表扫描和索引树扫描
May 15 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
php实现RSA加密类实例
2015/03/26 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Python接口自动化测试的实现
2020/08/28 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
电气自动化个人求职信范文
2014/02/03 职场文书
美术指导求职信
2014/03/17 职场文书
中职生自荐信范文
2014/06/15 职场文书
中学清明节活动总结
2014/07/04 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
学校捐款活动总结
2015/05/09 职场文书
高中物理教学反思
2016/02/19 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏