使用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 相关文章推荐
Windows10下安装MySQL8
Apr 06 MySQL
MySQL复制问题的三个参数分析
Apr 07 MySQL
MySQL 如何分析查询性能
May 12 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
详解MySQL数据库千万级数据查询和存储
May 18 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
MySQL中IO问题的深入分析与优化
Apr 02 MySQL
解决MySQL报“too many connections“错误
Apr 19 MySQL
详解Mysql事务并发(脏读、不可重复读、幻读)
Apr 29 MySQL
使用Mysql计算地址的经纬度距离和实时位置信息
Apr 29 MySQL
浅谈MySql update会锁定哪些范围的数据
Jun 25 MySQL
MySQL事务的隔离级别详情
Jul 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代码
2006/12/06 PHP
php Smarty date_format [格式化时间日期]
2010/03/15 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
利用ajax和PHP实现简单的流程管理
2017/03/23 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
深入了解NumPy 高级索引
2020/07/24 Python
Django静态文件加载失败解决方案
2020/08/26 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
高中竞选班长演讲稿
2014/04/24 职场文书
企业形象策划方案
2014/05/29 职场文书
倡导文明标语
2014/06/16 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
接收函格式
2015/01/30 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
汽车销售员工作总结
2015/08/12 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
Go gorilla/sessions库安装使用
2022/08/14 Golang