HTML5實現(xiàn)獲取地理位置信息并定位

這篇文章主要介紹了HTML5實現(xiàn)[獲取地理位置]信息并定位功能,本文講解了原生HTML5、百度地圖、谷歌地圖等三種獲取理位置信息并定位的方法,需要的朋友可以參考下:

HTML5提供了地理位置定位功能(Geolocation API),能確定用戶位置,我們可以借助HTML5的該特性開發(fā)基于地理位置信息的應(yīng)用。本文結(jié)合實例給大家分享如何使用HTML5,借助百度、谷歌地圖接口來獲取用戶準確的地理位置信息。

如何使用HTML5地理位置定位功能

定位功能(Geolocation)是HTML5的新特性,因此只有在支持HTML5的現(xiàn)代瀏覽器上運行,特別是手持設(shè)備如iphone,地理定位更加精確。首先我們要檢測用戶設(shè)備瀏覽器是否支持地理定位,如果支持則獲取地理信息。注意這個特性可能侵犯用戶的隱私,除非用戶同意,否則用戶位置信息是不可用的,所以我們在訪問該應(yīng)用時會提示是否允許地理定位,我們當然選擇允許即可。

function getLocation(){ 
  if (navigator.geolocation){ 
    navigator.geolocation.getCurrentPosition(showPosition,showError); 
  }else{ 
    alert("瀏覽器不支持地理定位。"); 
  } 
}       

上面的代碼可以知道,如果用戶設(shè)備支持地理定位,則運行 getCurrentPosition() 方法。如果getCurrentPosition()運行成功,則向參數(shù)showPosition中規(guī)定的函數(shù)返回一個coordinates對象,getCurrentPosition() 方法的第二個參數(shù)showError用于處理錯誤,它規(guī)定當獲取用戶位置失敗時運行的函數(shù)。

我們先來看函數(shù)showError(),它規(guī)定獲取用戶地理位置失敗時的一些錯誤代碼處理方式:

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("定位失敗,定位系統(tǒng)失效"); 
      break; 
  } 
} 

我們再來看函數(shù)showPosition(),調(diào)用coords的latitude和longitude即可獲取到用戶的緯度和經(jīng)度。

function showPosition(position){ 
  var lat = position.coords.latitude; //緯度 
  var lag = position.coords.longitude; //經(jīng)度 
  alert('緯度:'+lat+',經(jīng)度:'+lag); 
} 

利用百度地圖和谷歌地圖接口獲取用戶地址

上面我們了解了HTML5的Geolocation可以獲取用戶的經(jīng)緯度,那么我們要做的是需要把抽象的經(jīng)緯度轉(zhuǎn)成可讀的有意義的真正的用戶地理位置信息。幸運的是百度地圖和谷歌地圖等提供了這方面的接口,我們只需要將HTML5獲取到的經(jīng)緯度信息傳給地圖接口,則會返回用戶所在的地理位置,包括省市區(qū)信息,甚至有街道、門牌號等詳細的地理位置信息。
我們首先在頁面定義要展示地理位置的div,分別定義id#baidu_geo和id#google_geo。我們只需修改關(guān)鍵函數(shù)showPosition()。先來看百度地圖接口交互,我們將經(jīng)緯度信息通過Ajax方式發(fā)送給百度地圖接口,接口會返回相應(yīng)的省市區(qū)街道信息。百度地圖接口返回的是一串JSON數(shù)據(jù),我們可以根據(jù)需求將需要的信息展示給div#baidu_geo。注意這里用到了jQuery庫,需要先加載jQuery庫文件。


function
 showPosition(position){ 
  var latlon = position.coords.latitude+','+position.coords.longitude;
//baidu
var url = "<a ; 

  
$.ajax({ 

    
type: 
"GET"
, 

    
dataType: 
"jsonp"
, 

    
url: url, 

      
beforeSend: 
function
(){ 

        
$(
"#baidu_geo"
).html(
'正在定位...'
); 

      
}, 

      
success: 
function
 (json) { 

        
if
(json.status==0){ 

          
$(
"#baidu_geo"
).html(json.result.formatted_address); 

        
} 

      
}, 

      
error: 
function
 (XMLHttpRequest, textStatus, errorThrown) { 

        
$(
"#baidu_geo"
).html(latlon+
"地址位置獲取失敗"
); 

    
} 

  
}); 

}); 

再來看谷歌地圖接口交互

同樣我們將經(jīng)緯度信息通過Ajax方式發(fā)送給谷歌地圖接口,接口會返回相應(yīng)的省市區(qū)街道詳細信息。谷歌地圖接口返回的也是一串JSON數(shù)據(jù),這些JSON數(shù)據(jù)比百度地圖接口返回的要更詳細,我們可以根據(jù)需求將需要的信息展示給div#google_geo。

function
 showPosition(position){ 

  
var
 latlon = position.coords.latitude+
','
+position.coords.longitude; 

 
  
//google 

  
var
 url = 
'[http://maps.google.cn/maps/api/geocode/json?latlng=](http://qianduandu.com/redirect/aHR0cDovL21hcHMuZ29vZ2xlLmNuL21hcHMvYXBpL2dlb2NvZGUvanNvbj9sYXRsbmc9)'
+latlon+
'&language=CN'
; 

  
$.ajax({ 

    
type: 
"GET"
, 

    
url: url, 

    
beforeSend: 
function
(){ 

      
$(
"#google_geo"
).html(
'正在定位...'
); 

    
}, 

    
success: 
function
 (json) { 

      
if
(json.status==
'OK'
){ 

      
var
 results = json.results; 

        
$.each(results,
function
(index,array){ 

          
if
(index==0){ 

            
$(
"#google_geo"
).html(array[
'formatted_address'
]); 

          
} 

        
}); 

      
} 

    
}, 

    
error: 
function
 (XMLHttpRequest, textStatus, errorThrown) { 

      
$(
"#google_geo"
).html(latlon+
"地址位置獲取失敗"
); 

    
} 

  
}); 

}

以上的代碼分別將百度地圖接口和谷歌地圖接口整合到函數(shù)showPosition()中,我們可以根據(jù)實際情況進行調(diào)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378

推薦閱讀更多精彩內(nèi)容