中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

地理定位(一)

發布時間:2020-04-09 06:24:04 來源:網絡 閱讀:554 作者:ghcomeon 欄目:移動開發

Geolocation可以實現對訪客地理定位,當然,這種定位并不是說判斷用戶在那個國家,或是哪個國家的哪個城市,而是確定用戶在城市的那個街道上,甚至是用戶正在拿著手機在哪里上網,給出這個地點的坐標位置。

下面列出了支持地理定位的瀏覽器


IE
Firefox
Chrome
Safari
Opera
Safari iOS
Andriod
最低版本
9
3.5
5
3
10.6
3.2
2.1

問題最嚴重仍然是IE“老大哥”,比如IE7、IE8,要想在瀏覽器上實現地理定位功能,可以借助Google Gears,Google Gears只是對老版本瀏覽器的一個補救措施,Google現放棄對它的維護。補救的方法是:像安裝其它瀏覽器插件一樣,讓訪客在自己的瀏覽器上安裝Google Gears。如果訪客計算機中沒有安裝Google Gears,還可以使用Chrome Fram,或是讓訪客自己輸入當前位置。

地理定位的基本原理

   為了得到用戶的位置信息,瀏覽器會爭取位置提供商(location provider)的幫助。比如Firefox瀏覽器使用的是Google Location Services。當然,即使瀏覽器支持地理定位功能,如果你不允許,也不會把你的位置透漏給瀏覽器。

   對于通過網線(不是無線)上網的桌面計算機來說,辦法很簡單,就是定位不太準確。用戶一上網,他的信息就會通過雙絞線在計算機或本地網上傳輸。這個設備有唯一的IP地址(注意地理定位不使用局域網內的私有IP地址),靠這個IP就能在Internet上找到他。與IP地址對應,還有一個現實中的郵政編碼。

   位置提供商會把這兩個信息綜合起來。首先,找到你連接的IP地址,然后,確定使用該IP地址的路由器的位置。因為這個信息是間接的,所以使用桌面計算機的地理定位并不準確,但畢竟可以確定你所在的街道的位置。

   如果使用筆記本或是移動設備無線上網,位置提供商會尋找你附近的無線接入點。理想情況下,位置提供商會查詢一個大型數據庫,以確定你周圍幾個接入點的確切位置,然后再使用三角測量法算出你的位置。

   如果是使用手機上網,位置提供商還會采用類似的三角測量法,但是使用的信號發射塔的位置。經過迅速而相對準確的計算,最終得到的位置誤差大約在1000米左右。如果在高樓林立的市中心,由于信號發射塔相對較多,地理定位的結果也會更準確。

   還有很多的移動設備都配有專用的GPS組件,GPS使用的是衛星定位,誤差只有幾米。但GPS速度慢,耗電多。而且GPS在高樓林立的地區不好使,因為高大的建筑會屏蔽信號。

   另外還有其它的技術可以用于地理定位。位置提供商會想更多的辦法獲得位置信息,比如RFID芯片、藍牙設備以及Google Maps設置的cookie等。

   注意,無論你通過什么方式上網—就算是臺式機,地理定位都可以大概找到你。而如果使用能接受電話信號或是配有GPS芯片的設備,地理定位的坐標的準確性更是驚人。

查找訪客的坐標

地理定位的功能實際上是非常簡單的,主要就是navigator.geolocation對象的三個方法:

  • getCurrentPosition();

  • watchPosition();

  • clearWatch();

getCurrentPosition()方法取得訪客的位置。當然,查找位置不會立即返回結果,瀏覽器也不想鎖定頁面等待位置數據。所以getCurrentPosition()方法是異步,它會立即執行,但不會阻塞其它的代碼。完成地理定位后,它會觸發另一段代碼來處理返回的結果。

   測試地理定位的時候,需要使用支持地理定位的瀏覽器(我使用的Firefox),并且允許網頁訪問你的數據。在學會使用錯誤處理和地理定位設置的知識。

錯誤處理

如果訪客不愿意共享他們的位置數據,那地理定位就不會返回位置信息。在這樣的情況下,根本不會調用完成函數,而頁面也沒有辦法告訴你瀏覽器是在繼續挖掘數據,還是遇到了錯誤。為解決這個問題,可以在調用getCurrentPosition()時傳入兩個參數,第一個是函數在頁面成功取得數據時調用,第二個函數在地理定位因錯誤而終止時調用。

以下是一個同時傳入完成函數和錯誤函數的例子:

window.onload = function() {
  results = document.getElementById("results");
  var myOptions = {
    zoom: 13,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById("mapSurface"), myOptions);
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(
      geolocationSuccess, geolocationFailure
    );
    results.innerHTML = "定位已開始.";
  } else {
    results.innerHTML = "該瀏覽器不支持地理定位";
  }
};
function geolocationSuccess(position) {
results.innerHTML = "你的位置("+position.coords.latitude+","+position.coords.longitude+")";
}
function geolocationFailure(positionError) {
    results.innerHTML =
     "地理定位失敗";
}

   調用錯誤函數時,瀏覽器會給錯誤函數傳入一個錯誤對象,這個對象有兩個屬性:code和message。code屬性是一個數值,表示問題類型;message中包含著對問題的簡短描述。一般來說,message屬性多用于測試,而code屬性用于確定如何進行下一步的處理。下面是修改后的錯誤函數,檢測了code屬性所有可能的值:

function geolocationFailure(positionError) {
  if (positionError.code == 1) {
    results.innerHTML =
     "你已拒絕位置信息共享";
  }
  else if (positionError.code == 2) {
    results.innerHTML =
     "網絡連接失敗或位置服務不可用。";
  }
  else if (positionError.code == 3) {
    results.innerHTML =
     "獲取位置超時,請重試。";
  }
  else {
    results.innerHTML =
     "Sorry !發生未知的錯誤。";
  }
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜兰市| 疏附县| 景德镇市| 苗栗市| 始兴县| 沙田区| 西华县| 莒南县| 章丘市| 喀喇沁旗| 嫩江县| 车致| 崇文区| 平凉市| 东阿县| 长汀县| 浪卡子县| 高要市| 苏尼特右旗| 三都| 许昌市| 张掖市| 陈巴尔虎旗| 布尔津县| 新蔡县| 梓潼县| 晋城| 当阳市| 那曲县| 武威市| 体育| 新河县| 松江区| 淮阳县| 周口市| 绵竹市| 洪雅县| 苍溪县| 固镇县| 方正县| 雷山县|