使用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 逻辑备份与恢复测试的相关总结
May 14 MySQL
新手必备之MySQL msi版本下载安装图文详细教程
May 21 MySQL
浅谈mysql返回Boolean类型的几种情况
Jun 04 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
解决Mysql多行子查询的使用及空值问题
Jan 22 MySQL
MySQL日期时间函数知识汇总
Mar 17 MySQL
mysql insert 存在即不插入语法说明
Mar 25 MySQL
一文了解MYSQL三大范式和表约束
Apr 03 MySQL
MySQL 条件查询的常用操作
Apr 28 MySQL
mysql如何查询连续记录
May 11 MySQL
MySQL count(*)统计总数问题汇总
Sep 23 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
关于Intype一些小问题的解决办法
2008/03/28 PHP
PHP Ajax中文乱码问题解决方法
2009/02/27 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &
2010/02/09 PHP
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
PHP写的资源下载防盗链类分享
2014/05/12 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
javascript 节点排序 2
2011/01/31 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
利用jQuery异步上传文件的插件用法详解
2017/07/19 jQuery
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
js实现弹窗效果
2020/08/09 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
Python 文件操作的详解及实例
2017/09/18 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
UDP协议功能
2013/01/06 面试题
Linux上比较文件的命令都有哪些
2013/09/28 面试题
加拿大留学自荐信
2014/01/28 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
保护环境的宣传语
2015/07/13 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书