使用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和Oracle之间的误区
May 18 MySQL
MySQL中InnoDB存储引擎的锁的基本使用教程
May 26 MySQL
MySQL约束超详解
Sep 04 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
MySQL图形化管理工具Navicat安装步骤
Dec 04 MySQL
MySQL 开窗函数
Feb 15 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
Feb 28 MySQL
mysql使用 not int 子查询隐含陷阱
Apr 12 MySQL
MySQL创建管理KEY分区
Apr 13 MySQL
MySQL数据库 任意ip连接方法
May 20 MySQL
MySQL如何修改字段类型和字段长度
Jun 10 MySQL
SQL Server数据库的三种创建方法汇总
May 08 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
自定义session存储机制避免会话保持问题
2014/10/08 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
2013/10/11 Javascript
javascript实现des解密加密全过程
2014/04/03 Javascript
巧用replace将文字表情替换为图片
2014/04/17 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
python3 flask实现文件上传功能
2020/03/20 Python
python实现多进程通信实例分析
2019/09/01 Python
jupyter notebook 重装教程
2020/04/16 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
Python logging模块handlers用法详解
2020/08/14 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
大学生求职信
2014/06/17 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
Python 全局空间和局部空间
2022/04/06 Python