微信實現定位城市並獲取城市編碼


最近在做一個項目是將用戶的當前所在市縣定位出來並展示在手機端頁面,同時還要獲取到該市縣的城市編碼從而進行數據過濾,這里重點講定位城市及獲取城市編碼

前端頁面代碼:

首先引用騰訊地圖的一個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返回前台即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM