使用腾讯逆地理位置编码获取地理位置信息


前言

最近项目中一个发帖的功能需要获取当前用户的发帖位置,由于是在APP内部使用,而且APP是使用uniApp开发的,所以在使用开放平台的SDK选用上有些麻烦,有的是不支持uniApp,有的是必须上线才可以使用,所以最后想到一个折中的办法,让前端使用原生的JS去获取当前用户位置的地理位置编码,即经纬度,传输到后端后,调用腾讯地图开放平台的API使用逆地理位置编码接口去获取当前的地址信息。


一、代码

编码很简单,就是调用一个API

 @GetMapping("/getLocation/{longitude}/{dimension}")
 @ApiOperation(value = "APP:获取地理位置", notes = "APP:获取地理位置")
  public R getLocation(@ApiParam(value = "经度")@PathVariable String longitude,
                       @ApiParam(value = "纬度")@PathVariable String dimension) throws IOException {
      BigDecimal longitudeString = new BigDecimal(longitude);
      BigDecimal longitudeNum = longitudeString.setScale(6, RoundingMode.DOWN);
      BigDecimal dimensionString = new BigDecimal(dimension);
      BigDecimal dimensionNum = dimensionString.setScale(6, RoundingMode.DOWN);
      String url = "https://apis.map.qq.com/ws/geocoder/v1/?location="
              +longitudeNum+","+dimensionNum+"&key=在腾讯地图开放平台申请的key";
      //Json json = restTemplate.getForObject(url, Json.class);
      //创建HttpClient对象
      CloseableHttpClient httpClient = HttpClientBuilder.create().build();
      HttpGet get = new HttpGet(url);
      get.addHeader("Content-Type", "application/json;charset=utf8");
      //发送请求
      HttpResponse response = httpClient.execute(get);
      //返回json格式
      String res = EntityUtils.toString(response.getEntity());
      System.out.println(res);
      return R.ok(res);
  }

这里使用bigdecimal数据类型是个人的一个小习惯,经纬度保留了6位小数去传递

二、开放平台操作步骤

1.开发者认证

开发者认证主要是上传一些资料,认证时间一般很快,并且企业用户有很高的免费调用额度,这里就不再演示步骤

2.创建应用

在这里插入图片描述

在管理控制台创建一个应用,如上图

在这里插入图片描述

然后需要添加一个key

在这里插入图片描述

接着选则模式,这里每个模式都有详细介绍,我则选择了单一IP地址,指定了由当前我自己的服务器地址发出的请求才可以被当前应用key处理

在这里插入图片描述

添加成功后需要去分配额度,不分配额度默认是只能调用一次

在这里插入图片描述

最后按照开发文档给的请求参数组装请求,即可调用


总结

如上

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在web端使用腾讯地图API获取用户地理位置,可以使用HTML5中的Geolocation API。以下是一些简单的步骤: 1. 注册腾讯地图开发者账号并创建应用程序,然后获取密钥。 2. 在HTML页面中嵌入JavaScript代码,使用Geolocation API请求用户位置: ```javascript if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } else { alert("Geolocation is not supported by this browser."); } function showPosition(position) { var lat = position.coords.latitude; var lng = position.coords.longitude; // 调用腾讯地图API进行地理编码 } ``` 3. 在showPosition函数中,可以将用户的经纬度坐标传递给腾讯地图API进行地理编码,以获取用户位置的详细信息: ```javascript function showPosition(position) { var lat = position.coords.latitude; var lng = position.coords.longitude; var url = "https://apis.map.qq.com/ws/geocoder/v1/?location=" + lat + "," + lng + "&key=YOUR_KEY"; fetch(url) .then(response => response.json()) .then(data => { console.log(data.result.formatted_addresses.recommend); // 显示用户位置信息 }); } ``` 在以上代码中,需要将YOUR_KEY替换为你在腾讯地图开发者账号中生成的API密钥。 4. 最后,可以将获取到的用户位置信息显示在页面上,以便用户查看。 需要注意的是,使用Geolocation API获取用户位置需要用户授权。在请求用户授权时,可以使用下面的代码: ```javascript navigator.permissions.query({name:'geolocation'}).then(function(result) { if (result.state === 'granted') { navigator.geolocation.getCurrentPosition(showPosition); } else if (result.state === 'prompt') { navigator.geolocation.getCurrentPosition(showPosition, showError); } else if (result.state === 'denied') { showError("User denied geolocation"); } }); ``` 在以上代码中,使用permissions.query()函数查询用户是否授权Geolocation API,并根据结果调用相应的函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值