獲取位置資訊

biubiubiuer發表於2019-03-15

搜狐

<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> 

var returnCitySN = {"cip": "210.13.118.49", "cid": "310000", "cname": "上海市"};
複製程式碼

騰訊

<script src='https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js'></script> 

var geolocation = new qq.maps.Geolocation("OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77", "myapp");
geolocation.getLocation(showPosition);

// 獲取位置函式
function showPosition(position) {
console.log(position)
  localStorage.setItem('cityName',position.city)
  localStorage.setItem('provinceName',position.province)
  localStorage.setItem('distrinctName',position.district)
  localStorage.setItem('cityId',position.adcode)
  localStorage.setItem('addr',position.addr)
  localStorage.setItem('gps',JSON.stringify({lat:position.lat,lng:position.lng})) //火星座標(gcj02),騰訊、Google、高德通用
};


複製程式碼
//html 騰訊地圖元件 線上選址並獲取地理資訊
<iframe id="mapPage" width="100%" height="100%" frameborder=0 
   src="http://apis.map.qq.com/tools/locpicker?search=1&type=1&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77&referer=myapp">
</iframe> 

//js
 init:function(){
      var _this  = this;
      window.addEventListener('message', function (event) {
        // 接收位置資訊,使用者選擇確認位置點後選點元件會觸發該事件,回傳使用者的位置資訊
        var loc = event.data;
        if (loc && loc.module == 'locationPicker') {//防止其他應用也會向該頁面post資訊,需判斷module是否為'locationPicker'
          var str = loc.poiaddress;
          console.log(loc)
          _this.address = str
          console.log(loc.latlng)
          _this.coordinates = JSON.stringify(loc.latlng)
        }
      }, false);
  },
複製程式碼

H5定位

//IE9+
function getLocation(){ 
  if (navigator.geolocation){ 
    navigator.geolocation.getCurrentPosition(showPosition,showError); 
  }else{ 
    alert("瀏覽器不支援地理定位。"); 
  } 
}
function showPosition(position){ 
  var lat = position.coords.latitude; //緯度 
  var lag = position.coords.longitude; //經度 
  alert('緯度:'+lat+',經度:'+lag); 
} 
function showError(error){ 
  switch(error.code) { 
    case error.PERMISSION_DENIED: 
      alert("定位失敗,使用者拒絕請求地理定位"); 
      break; 
    case error.POSITION_UNAVAILABLE: 
      alert("定位失敗,位置資訊是不可用"); 
      break; 
    case error.TIMEOUT: 
      alert("定位失敗,請求獲取使用者位置超時"); 
      break; 
    case error.UNKNOWN_ERROR: 
      alert("定位失敗,定位系統失效"); 
      break; 
  } 
}
複製程式碼

地理位置獲取方式

Ip地址 這是一種比較不準確地獲取地理位置的辦法,很多時候獲取的是ISP機房的位置,但是獲取非常方便,沒有什麼限制。大多數時候,IP地址還是比較準確的,基本上能精確到某個小區或某個大樓,但是如果使用者使用代理或者VPN,就可能導致非常大的偏差。

GPS 這是一種非常準確地獲取地理位置的方法,GPS的精度可以達到10米左右。如果用來找人或者找建築,基本上都在目視範圍內。但是使用GPS還有一些限制:在室內使用時,訊號不太穩定,搜尋衛星的時間較長,會造成延時。使用GPS最大的障礙是:很多裝置(比如膝上型電腦)基本上都不帶GPS,而只有智慧手機才有。

Wi-Fi基站 連線位置已知的公共Wi-Fi時,可以獲得地理位置資訊。這種定位的精度比較不錯,而且還可以在室內定位。不過由於位置公開的Wi-Fi比較少,此種方法的適用範圍比較少。從目前的各類科技新聞來看,北京、上海、廣州將率先建立公共Wi-Fi基站,北京甚至在公交車上都已經設立Wi-Fi基站,這些也可以考慮到未來的應用中

GSM或CDMA基站 通過電話局基站定位,定位精度隨基站密度變化,精度非常一般,而且只有手機才能使用,並且地理位置資訊往往不太精確。

地理位置獲取流程

由於地理位置資訊涉及個人隱私,是受到法律保護的,因此,每當使用者在使用地理位置資訊時,提供地理位置獲取服務的軟體都應該遵守地理位置獲取的技術流程,經由使用者同意,才可以獲取資訊。在桌面瀏覽器上,此技術流程大致如下(在移動裝置非瀏覽器環境下會略有差異):

  1. 使用者開啟需要獲取地理位置的Web應用;
  2. 應用向瀏覽器請求地理位置,瀏覽器彈出詢問視窗,詢問使用者是否共享地理位置;
  3. 假設使用者允許,瀏覽器從裝置查詢相關資訊;
  4. 瀏覽器將相關資訊傳送到一個信任的位置伺服器,伺服器返回具體的地理位置。

相關文章