使用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的MVCC多版本并发控制的实现
Apr 14 MySQL
MySQL分库分表与分区的入门指南
Apr 22 MySQL
解读MySQL的客户端和服务端协议
May 10 MySQL
MySQL时间盲注的五种延时方法实现
May 18 MySQL
52条SQL语句教你性能优化
May 25 MySQL
mysql脏页是什么
Jul 26 MySQL
MySQL8.0的WITH查询详情
Aug 30 MySQL
mysql如何能有效防止删库跑路
Oct 05 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
Oct 15 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
Mysql查询时间区间日期列表,不会由于数据表数据影响
Apr 19 MySQL
手把手带你彻底卸载MySQL数据库
Jun 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
PHP控制网页过期时间的代码
2008/09/28 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
PHP线程的内存回收问题
2016/07/08 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
javascript Select标记中options操作方法集合
2008/10/22 Javascript
(function($){...})(jQuery)的意思
2010/07/22 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
2015年感恩父亲节演讲稿
2015/03/19 职场文书
2015年财务部工作总结
2015/04/10 职场文书
在人间读书笔记
2015/06/30 职场文书
2016年秋季趣味运动会开幕词
2016/03/04 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript