Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android基站定位之實現三基站(多基站)定位

Android基站定位之實現三基站(多基站)定位

編輯:Android開發實例

這一篇基於:Android基站定位之實現單基站定位

闡述幾個概念:

基站:類似於WIFI熱點,官方解釋,移動通信系統中,連接固定部分與無線部分,並通過空中的無線傳輸與移動台相連的設備。基站即公用移動通信基站是無線電台站的一種形式,是指在一定的無線電覆蓋區中,通過移動通信交換中心,與移動電話終端之間進行信息傳遞的無線電收發信電台。

單基站定位是指:通過手機獲取當前連接到的基站信息,來確定用戶的大概位置(用戶可能在某個基站(手機當前連接的基站)發出的無線電覆蓋區域中)。

三基站或多基站:通過手機獲取附近區域的基站信息(不是用戶當前連接的基站,得到的是一組基站信息),來確定用戶的大概位置。

獲取鄰區基站信息:

 

  1. // 獲取鄰區基站信息  
  2.       List<NeighboringCellInfo> infos = mTelephonyManager.getNeighboringCellInfo();  
  3.       StringBuffer sb = new StringBuffer("總數 : " + infos.size() + "\n");  
  4.       for (NeighboringCellInfo info1 : infos) { // 根據鄰區總數進行循環  
  5.           sb.append(" LAC : " + info1.getLac()); // 取出當前鄰區的LAC  
  6.           sb.append(" CID : " + info1.getCid()); // 取出當前鄰區的CID  
  7.           sb.append(" BSSS : " + (-113 + 2 * info1.getRssi()) + "\n"); // 獲取鄰區基站信號強度  
  8.       }  


注:中國聯通的基本上獲取不到附近的基站,我測的時候使用的是中國移動。

一、探索:

       1、我猜想請求參數的Json是這樣組裝的:     

  1. JSONObject json = new JSONObject();  
  2.        json.put("version", "1.1.0");  
  3.        json.put("host", "maps.google.com");  
  4.        json.put("location_area_code", "6338");  
  5.        json.put("mobile_country_code", "460");  
  6.        json.put("mobile_network_code", "0");  
  7.        json.put("age", 0);  
  8.          
  9.        JSONArray array = new JSONArray();  
  10.        JSONObject json1 = new JSONObject();  
  11.        json1.put("cell_id", "62291");  
  12.        json1.put("signal_strength", -95);  
  13.        array.put(json1);  
  14.          
  15.        JSONObject json2 = new JSONObject();  
  16.        json2.put("cell_id", "62290");  
  17.        json2.put("signal_strength", -101);  
  18.        array.put(json2);  
  19.          
  20.        json.put("cell_towers", array);  

           2、組拼好的JSON字符串:

  1. {  
  2.     "mobile_network_code":"0",  
  3.     "location_area_code":"6338",  
  4.     "host":"maps.google.com",  
  5.     "cell_towers":  
  6.         [  
  7.           {  
  8.              "signal_strength":-95,  
  9.              "cell_id":"62291" 
  10.           },  
  11.           {  
  12.               "signal_strength":-101,  
  13.               "cell_id":"62290" 
  14.            }  
  15.          ],  
  16.          "age":0,  
  17.          "mobile_country_code":"460",  
  18.          "version":"1.1.0" 
  19.  }  

      3、通過HTTP請求返回的JSON形式結果:

  1. {  
  2.     "location":  
  3.         {  
  4.             "latitude":"0.0",  
  5.             "longitude":"0.0",  
  6.             "address":  
  7.             {  
  8.                 "city":"基站信息不存在,請從手機上讀取正確的基站信息。",  
  9.                 "country":"",  
  10.                 "country_code":"" 
  11.                 ,"county":"",  
  12.                 "postal_code":"",  
  13.                 "region":"",  
  14.                 "street":"",  
  15.                 "street_number":"" 
  16.              }  
  17.          },  
  18.          "access_token":"dummytoken" 
  19.    }  


二、可行的方式:

        1、通過單個附近的基站信息定位:

        組裝參數:

  1. /**  
  2.     * 獲取JSON形式的基站信息  
  3.     * @param mcc 移動國家代碼(中國的為460)  
  4.     * @param mnc 移動網絡號碼(中國移動為0,中國聯通為1,中國電信為2);   
  5.     * @param lac 位置區域碼  
  6.     * @param cid 基站編號  
  7.     * @param bsss 基站信號強度  
  8.     * @return json  
  9.     * @throws JSONException  
  10.     */ 
  11.    private String getJsonCellPos(int mcc, int mnc, int lac, int cid, int bsss) throws JSONException {  
  12.        JSONObject jsonCellPos = new JSONObject();  
  13.        jsonCellPos.put("version", "1.1.0");  
  14.        jsonCellPos.put("host", "maps.google.com");  
  15.  
  16.        JSONArray array = new JSONArray();  
  17.        JSONObject json1 = new JSONObject();  
  18.        json1.put("location_area_code", "" + lac + "");  
  19.        json1.put("mobile_country_code", "" + mcc + "");  
  20.        json1.put("mobile_network_code", "" + mnc + "");  
  21.        json1.put("age", 0);  
  22.        json1.put("cell_id", "" + cid + "");  
  23.        json1.put("signal_strength", bsss);  
  24.        array.put(json1);  
  25.  
  26.        jsonCellPos.put("cell_towers", array);  
  27.        return jsonCellPos.toString();  
  28.    }  

       請求的JSON字符串:

 

  1. {  
  2.            "cell_towers":  
  3.                [  
  4.                 {  
  5.                     "mobile_network_code":"0",  
  6.                     "location_area_code":"6338",  
  7.                     "cell_id":"62291",  
  8.                     "signal_strength":-95,  
  9.                     "age":0,  
  10.                     "mobile_country_code":"460" 
  11.                  }  
  12.                 ],  
  13.             "host":"maps.google.com",  
  14.             "version":"1.1.0" 
  15.          }  

          返回JSON形式結果:

  1. {  
  2.            "location":  
  3.            {  
  4.                "latitude":"31.214667405",  
  5.                "longitude":"121.59903152499999",  
  6.                "address":  
  7.                {  
  8.                    "city":"上海市浦東新區郭守敬路;上海奧威科技開發公司、科威國際技術轉移中心公司、張江高科技園區熱力中心[附近]",  
  9.                    "country":"",  
  10.                    "country_code":"",  
  11.                    "county":"",  
  12.                    "postal_code":"",  
  13.                    "region":"",  
  14.                    "street":"",  
  15.                    "street_number":"" 
  16.                }  
  17.           },  
  18.           "access_token":"dummytoken" 
  19.        }  

 

        2、通過多個附近的基站信息定位:

              又一次猜想:

              請求JSON:

  1. {  
  2.             "cell_towers":  
  3.                 [  
  4.                  {  
  5.                      "mobile_network_code":"0",  
  6.                      "location_area_code":"6338",  
  7.                      "cell_id":"62291",  
  8.                      "signal_strength":-95,  
  9.                      "age":0,  
  10.                      "mobile_country_code":"460" 
  11.                  },  
  12.                  {  
  13.                      "mobile_network_code":"0",  
  14.                      "location_area_code":"6338",  
  15.                      "cell_id":"62290",  
  16.                      "signal_strength":-101,  
  17.                      "age":1,  
  18.                      "mobile_country_code":"460" 
  19.                   }  
  20.                  ],  
  21.                  "host":"maps.google.com",  
  22.                  "version":"1.1.0" 
  23.          }  

 

              返回JSON:

 

  1. {  
  2.             "location":  
  3.             {  
  4.                 "latitude":"31.21485922285714",  
  5.                 "longitude":"121.59990774285711",  
  6.                 "address":  
  7.                 {  
  8.                     "city":"上海市浦東新區郭守敬路276號;上海奧威科技開發公司、科威國際技術轉移中心公司、張江高科技園區熱力中心[附近]",  
  9.                     "country":"",  
  10.                     "country_code":"",  
  11.                     "county":"",  
  12.                     "postal_code":"",  
  13.                     "region":"",  
  14.                     "street":"",  
  15.                     "street_number":"" 
  16.                  }  
  17.             },  
  18.             "access_token":"dummytoken" 
  19.         }  

        結論:第三方服務器端可能有限制,每次只接受JSONArray中的第一個元素。如果要想一次性查找附近多個基站的經緯度及所在的地址,就只能編寫for循環,一次一次的訪問第三方的服務器。

 

        3、個人觀點:所謂的三點定位或多點定位,只是讓想知道用戶當前位置的人多了一個選擇而已。三點定位得到的是三個點,並非是一個比較准確的點。

三、測試網址:http://www.minigps.net/map3.html



轉自:http://blog.csdn.net/android_ls/article/details/8673532

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved