使用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服务添加 iptables防火墙策略的方案
Apr 29 MySQL
Navicat连接MySQL错误描述分析
Jun 02 MySQL
MySQL GRANT用户授权的实现
Jun 18 MySQL
MySQL高速缓存启动方法及参数详解(query_cache_size)
Jul 01 MySQL
SQL实现LeetCode(196.删除重复邮箱)
Aug 07 MySQL
浅谈MySQL之select优化方案
Aug 07 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
Oct 16 MySQL
教你使用VS Code的MySQL扩展管理数据库的方法
Jan 22 MySQL
pt-archiver 主键自增
Apr 26 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 MySQL
mysqldump进行数据备份详解
Jul 15 MySQL
MySQL中LAG()函数和LEAD()函数的使用
Aug 14 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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
php二分查找二种实现示例
2014/03/12 PHP
php实现天干地支计算器示例
2014/03/14 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
php截取中文字符串函数实例
2015/02/23 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
vue实现购物车案例
2020/05/30 Javascript
Python使用OpenCV进行标定
2018/05/08 Python
python中while和for的区别总结
2019/06/28 Python
django settings.py 配置文件及介绍
2019/07/15 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
八荣八耻的活动方案
2014/08/16 职场文书
验房委托书
2014/08/30 职场文书
2015年药店店长工作总结
2015/04/29 职场文书
学习十八大的感悟
2015/08/11 职场文书
微信小程序实现轮播图指示器
2022/06/25 Javascript
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android