使用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 13 MySQL
详解MySQL中的主键与事务
May 27 MySQL
mysql升级到5.7时,wordpress导数据报错1067的问题
May 27 MySQL
解析MySQL binlog
Jun 11 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
ORM模型框架操作mysql数据库的方法
Jul 25 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
Mysql如何实现不存在则插入,存在则更新
Mar 25 MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 MySQL
MySQL的表级锁,行级锁,排它锁和共享锁
Jul 15 MySQL
详解MySQL的内连接和外连接
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
两种php调用Java对象的方法
2006/10/09 PHP
生成缩略图
2006/10/09 PHP
如何开发一个虚拟域名系统
2006/10/09 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
通过数据库向Django模型添加字段的示例
2015/07/21 Python
Python登录系统界面实现详解
2019/06/25 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
基于matplotlib xticks用法详解
2020/04/16 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书