使用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 相关文章推荐
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
MySQL sql_mode的使用详解
May 08 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
MySQL数据库10秒内插入百万条数据的实现
Nov 01 MySQL
MySQL 服务和数据库管理
Nov 11 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
MySQL利用UNION连接2个查询排序失效详解
Nov 20 MySQL
mysql中DCL常用的用户和权限控制
Mar 31 MySQL
Mysql查询时间区间日期列表,不会由于数据表数据影响
Apr 19 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 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
实用函数9
2007/11/08 PHP
php 表单验证实现代码
2009/03/10 PHP
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
php随机显示图片的简单示例
2014/02/15 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
Bootstrap精简教程
2015/11/27 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
[04:45]DOTA2-DPC中国联赛正赛 iG vs LBZS 赛后选手采访
2021/03/11 DOTA
判断网页编码的方法python版
2016/08/12 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
python中自带的三个装饰器的实现
2019/11/08 Python
opencv python图像梯度实例详解
2020/02/04 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
关键字final的用法
2013/10/02 面试题
职业生涯规划书范文
2014/03/10 职场文书
中国好声音华少广告词
2014/03/17 职场文书
导游个人求职信
2014/04/25 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书