使用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 12 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
MySQL连接查询你真的学会了吗?
Jun 02 MySQL
mysql 带多个条件的查询方式
Jun 05 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
浅谈MySQL表空间回收的正确姿势
Oct 05 MySQL
Mysql如何实现不存在则插入,存在则更新
Mar 25 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
Apr 09 MySQL
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
Apr 20 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 23 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
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
PHP的FTP学习(三)
2006/10/09 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
js获取单选按钮的数据
2006/11/27 Javascript
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
Python类及获取对象属性方法解析
2020/06/15 Python
Python wordcloud库安装方法总结
2020/12/31 Python
HTML5实现移动端弹幕动画效果
2019/08/01 HTML / CSS
联强国际笔试题面试题
2013/07/10 面试题
静态成员和非静态成员的区别
2012/05/12 面试题
认识深刻的检讨书
2014/02/16 职场文书
电子银行营销方案
2014/02/22 职场文书
小学生元旦感言
2014/02/26 职场文书
副总经理岗位职责
2014/03/16 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
党小组评议意见
2015/06/02 职场文书
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android