使用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 相关文章推荐
MySQL性能压力基准测试工具sysbench的使用简介
Apr 21 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
MYSQL(电话号码,身份证)数据脱敏的实现
May 28 MySQL
MySQL单表千万级数据处理的思路分享
Jun 05 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
MySQL 8.0 驱动与阿里druid版本兼容问题解决
Jul 01 MySQL
MySQL系列之六 用户与授权
Jul 02 MySQL
MYSQL 表的全面总结
Nov 11 MySQL
深入讲解数据库中Decimal类型的使用以及实现方法
Feb 15 MySQL
MySQL高级进阶sql语句总结大全
Mar 16 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 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
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
php导出excel格式数据问题
2014/03/11 PHP
使用PHP开发留言板功能
2019/11/19 PHP
海量经典的jQuery插件集合
2010/01/12 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
详解Vue 事件修饰符capture 的使用
2017/12/29 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
浅析Python中的多重继承
2015/04/28 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
利用python 读写csv文件
2020/09/10 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
医学生个人求职信范文
2013/09/24 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
供用电专业求职信
2014/07/07 职场文书
销售目标责任书
2014/07/23 职场文书
幽灵公主观后感
2015/06/09 职场文书
《少年闰土》教学反思
2016/02/18 职场文书