微信实现定位城市并获取城市编码

最近在做一个项目是将用户的当前所在市县定位出来并展示在手机端页面,同时还要获取到该市县的城市编码从而进行数据过滤,这里重点讲定位城市及获取城市编码

前端页面代码:

首先引用腾讯地图的一个js

<script  type="text/javascript" src="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js" ></script>

同时在页面加载时调用下面js:

$(function() {
    getLocation();
})
复制代码
function getLocation() {
  var geolocation = new qq.maps.Geolocation("OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77", "myapp");  
  if (geolocation) {  
    var options = {timeout: 8000};  
    geolocation.getLocation(onSuccess, onError, options);  
  } else {  
    alert("定位尚未加载");  
  }  
}

//成功时
function onSuccess(position) {
  //经度
  var longitude = position.lng;
  //纬度
  var latitude = position.lat;
  var param = {
    longitude : longitude,
    latitude : latitude
  };
  $.ajax({
    type : "post",
    url : "getCode.jspx",
    data : param,
    dataType : "json",
    success : function(data) {
      alert(data.admCode);
      alert(data.adm);
    }
  })
}

//失败时
function onError(error) {
  switch (error.code) {
    case 1:
      alert(
"位置服务被拒绝");
      break;
    case 2:
      alert(
"暂时获取不到位置信息");
      break;
    case 3:
      alert(
"获取信息超时");
      break;
    case 4:
      alert(
"未知错误");
      break;
  }
}
复制代码

这里可以获取用户当前所在市县的经纬度,然后经过经纬度再去后台调用接口获取城市编码,我们看后台代码:

复制代码
@RequestMapping("/getCode.jspx")
public String getCode(HttpServletRequest request,HttpServletResponse response, ModelMap model) {
    String longitude = request.getParameter("longitude");
    String latitude =  request.getParameter("latitude");
    String add = getAdd(longitude, latitude);
    JSONObject jsonObject = JSONObject.fromObject(add);
    JSONArray jsonArray = JSONArray.fromObject(jsonObject.getString("addrList"));
    JSONObject j_2 = JSONObject.fromObject(jsonArray.get(0));
    String allAdd = j_2.getString("admName");
    String arr[] = allAdd.split(",");
    System.out.println("省:" + arr[0] + "\n市:" + arr[1] + "\n区:" + arr[2]);
    Map<String,String> map = new HashMap<String,String>();
    if(arr[2] != null && !"".equals(arr[2])){
      map.put("adm", arr[2]);
    }else if(arr[1] != null && !"".equals(arr[1])){
      map.put("adm", arr[1]);
    }else{
      map.put("adm", arr[0]);
    }
    String admCode = j_2.getString("admCode");
    System.out.println(admCode);
    map.put("admCode", admCode);
    String json = JSONObject.fromObject(map).toString();
    return json
}
    
public String getAdd(String log, String lat) {
      // lat 小 log 大
      // 参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)
    String urlString = "http://gc.ditu.aliyun.com/regeocoding?l=" + lat + "," + log + "&type=010";
    String res = "";
    try {
      URL url = new URL(urlString);
      java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection();
      conn.setDoOutput(true);
      conn.setRequestMethod("POST");
      java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),"UTF-8"));
          String line;
          while ((line = in.readLine()) != null) {
              res += line + "\n";
          }
          in.close();
       } catch (Exception e) {
           System.out.println("error in wapaction,and e is " + e.getMessage());
       }
       System.out.println(res);
       return res;
}
复制代码

控制台打印输出:

{"queryLocation":[34.797817,113.601715],"addrList":[{"type":"poi","status":1,"name":"郑州热电厂家属院(南门)","id":"ANB01730IC2W","admCode":"410102","admName":"河南省,郑州市,中原区,","addr":"","nearestPoint":[113.60046,34.79849],"distance":142.299}]}

省:河南省
市:郑州市
区:中原区
410102

将得到的数据封装成json返回前台即可

posted @   岁月淡忘了谁  阅读(3022)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示