根据获取的经纬度查询用户位置的距离

2023-11-09

在实现需求的时候难免会遇到根据经纬度要获取距离用户定位的位置的距离,今天就跟大家介绍一下怎么使用sql语句获取到距离用户定位位置的距离。

要获取用户位置跟店铺的距离需要一些必要参数,第一,必须要获取到用户定位的经纬度,第二必须要有你要查询距离店铺的经纬度这样就可以实现查看距离的需求了。

这边用户定位使用的是高德的定位接口

String result = null;
        try {
//            String resp = httpClient.open(AMAP_LOCATION_URL).get(map);
            // 拼接请求高德的url
            String url = "http://restapi.amap.com/v3/geocode/regeo?location=" + location + "&extensions=all&output=JSON&key=" + gaodemapkey;

            // 请求高德接口
            result = sendHttpGet(url);
            JSONObject resultJOSN = JSONObject.parseObject(result);
            System.out.println("高德接口返回原始数据:"+resultJOSN);
//            result = JSON.parseObject(resp);


        JSONObject regeocode = resultJOSN.getJSONObject("regeocode");
        if (regeocode != null) {
            JSONObject addressComponent = regeocode.getJSONObject("addressComponent");
            JSONObject streetNumber = addressComponent.getJSONObject("streetNumber");
            String address = regeocode.getString("formatted_address");
            if (address != null) {
                locationVO.setAddress(address);
            }
            if (streetNumber != null) {
                String city = addressComponent.getString("city");
                String country = addressComponent.getString("country");
                String province = addressComponent.getString("province");
                String area = addressComponent.getString("district");
                String areacode = addressComponent.getString("adcode");
                locationVO.setCity(city);
                locationVO.setCountry(country);
                locationVO.setProvince(province);
                locationVO.setArea(area);
                locationVO.setAreacode(areacode);
                if (StringUtils.isBlank(city) || city.contains("[]")) {
                    city = addressComponent.getString("province");
                }
//                locationVO.setLocationName(city + addressComponent.getString("district") + address);
            }
        }
        } catch (Exception e) {
            System.out.print("locate exception"+e);
        }
高德开放平台地址: https://lbs.amap.com/

也可以根据地址查询经纬度 这个我们在用户填写店铺的一些地址的时候可以根据这个接口获取他填地址的经纬度,我们把这个经纬度存到数据库。

 /**
     * 根据地址查询经纬度
     *
     * @param address
     * @param
     * @return
     */
    public static JSONObject getLngAndLat(String address) {
        JSONObject positionObj = new JSONObject();

        try {
            // 拼接请求高德的url
            String url = "http://restapi.amap.com/v3/geocode/geo?address=" + address +"市人民政府"+ "&output=JSON&key=" + gaodemapkey;
            // 请求高德接口
            String result = sendHttpGet(url);
            JSONObject resultJOSN = JSONObject.parseObject(result);
            System.out.println("高德接口返回原始数据:");
            System.out.println(resultJOSN);
            JSONArray geocodesArray = resultJOSN.getJSONArray("geocodes");
            if (geocodesArray.size() > 0) {
                String position = geocodesArray.getJSONObject(0).getString("location");
                String[] lngAndLat = position.split(",");
                String longitude = lngAndLat[0];
                String latitude = lngAndLat[1];
                positionObj.put("longitude", longitude);
                positionObj.put("latitude", latitude);
                positionObj.put("country", geocodesArray.getJSONObject(0).getString("country"));
                positionObj.put("province", geocodesArray.getJSONObject(0).getString("province"));
                positionObj.put("city", geocodesArray.getJSONObject(0).getString("city"));
                positionObj.put("district", geocodesArray.getJSONObject(0).getString("district"));
            }
            geocodesArray.getJSONObject(0).getString("location");

        } catch (Exception e) {
            e.printStackTrace();
        }
        return positionObj;

下面就是具体SQL语句

 SELECT
        id,views,videourl,market_address,market_name,shopCount,
        (
        6371 * acos (
        cos ( radians( 前端传的纬度) ) * cos( radians(数据库的纬度 ) ) * cos( radians( 数据库的经度) - radians(
        前端传的经度 ) ) + sin ( radians( 前端传的纬度 ) ) * sin( radians( 数据库的纬度) )
        )
        )
        AS
        distance
        FROM `teble`

大家在使用的时候直接把文字换成自己的参数就可以了

大家有什么问题可以下方评论交流

创作不易转载应注明出处

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据获取的经纬度查询用户位置的距离 的相关文章

随机推荐

  • IDEA pom.xml依赖版本号报错

    自我问题解决记录 折腾了一上午终于解决 我先按照其他解决方法都试过 没有任何反应 大家还是可以试试 1 修改maven版本号 重新下载旧版本并配置环境变量 并装了cleanLastUpdated bat小脚本去清除没有下载成功 完全的包 没
  • UC3843驱动BOOST升压电路

    充能模块通过一个UC3843芯片控制BOOST升压电路实现 由于电磁炮的发射能量与电容上储存的能量存在正相关 电容上储存的能量由于电容的容值正相关 因此本系统需要选择较大的电解电容 在实际的过程中选择了2个470uF 450V的电容进行并联
  • 【刷题】华为笔试面试机考 [HJ5] - 进制转换

    题目地址 点击跳转 题目描述 写出一个程序 接受一个十六进制的数 输出该数值的十进制表示 输入描述 输入一个十六进制的数值字符串 注意 一个用例会同时有多组输入数据 请参考帖子https www nowcoder com discuss 2
  • GAMES101-现代计算机图形学学习笔记(4)作业3

    前言 上篇作业2 本篇将更新作业3相关内容 作业3相关链接 games的作业3链接 我的源码 作业3简述 插值计算 各种shader实现 作业3相关知识笔记 Barycentric Coordinates Blinn Phong Lambe
  • 开源大数据工具汇总

    查询引擎 一 Phoenix 贡献者 Salesforce 简介 这是一个Java中间层 可以让开发者在Apache HBase上执行SQL查询 Phoenix完全使用Java编写 代码位于GitHub上 并且提供了一个客户端可嵌入的JDB
  • gRpc入门

    gRpc 一 简介 1 gprc概念 gRpc是有google开源的一个高性能的pc框架 Stubby google内部的rpc 2015年正式开源 云原生时代一个RPC标准 tips 异构系统 就是不同编程语言的系统 2 grpc核心设计
  • 解决docker在CentOs7中安装好运行不了问题

    用yum方式安装docker遇到错误的以下问题 Docker 无法启动 root localhost 桌面 yum update root localhost 桌面 yum install docker root localhost 桌面
  • Java复习-20-接口(2)- 工厂设计模式

    工厂设计模式 Factory 观察如下例子 食物接口 所有食物都应该能够食用 但食用方式不同 因此包含抽象方法 eat 面包子类 实现食物接口 实现接口中的 eat 方法 吃面包 牛奶子类 实现食物接口 实现接口中的 eat 方法 喝牛奶
  • 方法(函数)数组

    方法 函数 数组 概念 方法 也叫函数 但是一般在java中都叫方法 可以看成是一个可以完成独立功能的代码块 可以反复使用 每次使用都是独立的 存在于类的结构体 作用 完成功能 数据的处理 方法可以拿来反复使用 每次使用都是独立的 publ
  • 构建更加灵活的IIoT解决方案

    Softing的dataFEED系列edgeConnector产品现在支持MQTT subscriber功能 从而支持与物联网云或物联网边缘应用的双向通信 Softing edgeConnector产品的新版本2 31现在支持MQTT su
  • Bootstrap的基本使用方法,5分钟帮你搞懂怎么用

    作为Coder 我们都接触过Web design 如何快速的构建Web应用成了我们比较头疼的一个问题 不仅要考虑各种浏览器的兼容性 同时还要考虑各种手机的页面适配 毕竟现在已经到了互联网手机满天飞的时代了 我有会听嵩哥的歌 对 唱歌的那位
  • 【转载】VB滚轮插件(win7 64位)

    在五楼的时候电脑里的VB都已经预装好了滚轮插件了 这次下四楼用自己的电脑才发现那么一个小小的东西真心很方便 想安装一个 按照网上的教程发现了一点点小问题 最后当然完美解决啦 分享一下 已经知道的童鞋呢 忽略就好啦 首先 请看一篇转帖 看不看
  • GPT3.5 VS GPT-4写领导讲话稿,谁是最强笔杆子?

    正文共 1240 字 阅读大约需要 5 分钟 文秘 公务员必备技巧 您将在5分钟后获得以下超能力 快速生成领导讲话稿 Beezy评级 B级 经过简单的寻找 大部分人能立刻掌握 主要节省时间 推荐人 Kim 编辑者 Linda 图片由Lexi
  • 钢条切割(dp解法)

    1 问题描述 Serling公司购买长钢条 将其切割为短钢条出售 切割工序本身没有成本支出 公司管理层希望知道最佳的切割方案 假定我们知道Serling公司出售一段长为i英寸的钢条的价格为pi i 1 2 单位为美元 钢条的长度均为整英寸
  • 无法打开包括文件:“QtNetwork”: No such file or directory

    QTCN社区 gt Qt基础编程 gt fatal error C1083 无法打开包括文件 QtNetwork No such file or directory 打印本页 登录 注册 回复主题 发表主题 zhubangbing 2008
  • docker安装mysql

    拉取mysql镜像 docker pull mysql 5 7 启动 docker run itd name mysql p 3307 3306 e MYSQL ROOT PASSWORD root mysql 5 7
  • 自组织特征映射网络(SOFM)

    1 SOFM简介 自组织特征映射网络SOFM又称自组织映射网络SOM 是一种自组织竞争神经网络 一个神经网络接受外界输入模式时 将会分为不同的对应区域 各区域对输入模式具有不同的响应特征 而且这个过程是自动完成的 其特点与人脑的自组织特性相
  • Ocaml——Let

    1 并行定义 如果这个变量在并行定义之前没有定义过 那么会出现变量无定义的错误 例如 2 Let局部定义 语法格式如下 let lt 变量 gt lt 表达式1 gt in lt 表达式2 gt 在这个格式中 变量不再是全局有效的变量 他的
  • linux 系统启动盘制作方式

    文章目录 linux 系统启动盘制作方式 制作镜像 制作系统盘 linux 系统启动盘制作方式 制作镜像 解压iso 一定要带着 discinfo productinfo treeinfo 在替换的软件包的Packages 同级目录执行 c
  • 根据获取的经纬度查询用户位置的距离

    在实现需求的时候难免会遇到根据经纬度要获取距离用户定位的位置的距离 今天就跟大家介绍一下怎么使用sql语句获取到距离用户定位位置的距离 要获取用户位置跟店铺的距离需要一些必要参数 第一 必须要获取到用户定位的经纬度 第二必须要有你要查询距离