使用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 pt-slave-restart工具的使用简介
Apr 07 MySQL
MySql学习笔记之事务隔离级别详解
May 12 MySQL
MySQL系列之十 MySQL事务隔离实现并发控制
Jul 02 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
一文了解MYSQL三大范式和表约束
Apr 03 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
以MySQL5.7为例了解一下执行计划
Apr 13 MySQL
Mysql 如何合理地统计一个数据库里的所有表的数据量
Apr 18 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 MySQL
面试官问我Mysql的存储引擎了解多少
Aug 05 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来处理多个提交任务
2006/10/09 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
php微信开发之关注事件
2018/06/14 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
深入研究React中setState源码
2017/11/17 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
Vue 3.0 前瞻Vue Function API新特性体验
2019/08/12 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
python匿名函数用法实例分析
2019/08/03 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
Shell脚本如何向终端输出信息
2014/04/25 面试题
购房意向书
2014/08/30 职场文书
就业意向协议书
2015/01/29 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
校运会宣传稿大全
2015/07/23 职场文书
关于做家务的心得体会
2016/01/23 职场文书
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis