Geolocation獲取地理定位

當今技術(shù)定位的方式壮莹,有位置信息來源定位姻檀,IP定位,GPS定位周荐,WIFI定位僵娃,手機定位和自定義定位。本文通過獲取經(jīng)緯度默怨,使用各地圖提供的接口再獲取準確的街道位置信息,并做一個比較

①入門-獲取經(jīng)緯度

JS

function Location(){ ? //函數(shù)名location關(guān)鍵字

if(navigator.geolocation) ? //檢測當前設備是否支持H5Geolocation API

{

navigator.geolocation.getCurrentPosition(showmap,error);

//檢測結(jié)果存在地理定位對象的話愚屁,navigator.geolocation調(diào)用將返回該對象

//第一個參數(shù)獲取當前地理信息成功是執(zhí)行的回調(diào)函數(shù),帶3個參數(shù)送浊,

//第一個參數(shù)是必寫的丘跌,表示獲取當前地理位置信息成功時所執(zhí)行的回調(diào)函數(shù),該函數(shù)參數(shù)position也是必須耸棒。

//第二個參數(shù)是獲取地理位置信息失敗的回調(diào)函數(shù)报辱,該函數(shù)的參數(shù)error也是必寫的,第三個參數(shù)是一些可選屬性列表(2碍现、3個參數(shù)可省略)

}

else{

alert("該瀏覽器不支持獲取地理位置");

}

}

function showmap(position){ ? ? ? //.強調(diào)coords

var cords = position.coords;

var latitude = cords.latitude; ? ? ?//獲取緯度

var longitude = cords.longitude; ? ?//獲取經(jīng)度

var xy=document.getElementById("map");

xy.innerHTML="當前位置:"+"
"+"latitude:"+latitude+"
"+"longitude:"+longitude;

}

function error(error){ ? ? ? ? ? //.強調(diào)code

var err = error.code;

switch(err){

case 1:alert("用戶拒絕了位置服務");

case 2:alert("獲取不到位置信息");

case 3:alert("獲取信息超時");

}

}

Location(); //記得在最后執(zhí)行一下調(diào)用就好了

HTML

<button onClick="Location()">點擊獲取地址</button>


②返回街道信息

HTML

<p>經(jīng)緯度:</p>

<p id="coordinates"></p>

<p>百度地圖定位位置</p>

<p>街道位置:</p>

<p id="baidu_street"></p>

<p>谷歌地圖定位位置</p>

<p>街道位置:</p>

<p id="google_street"></p>

JS

function Location(){

if(navigator.geolocation) ? //檢測當前設備是否支持H5Geolocation API

{

navigator.geolocation.getCurrentPosition(showPosition,error);

//檢測結(jié)果存在地理定位對象的話衣屏,navigator.geolocation調(diào)用將返回該對象

//第一個參數(shù)獲取當前地理信息成功是執(zhí)行的回調(diào)函數(shù)辩棒,帶3個參數(shù)膨疏,

//第一個參數(shù)是必寫的,表示獲取當前地理位置信息成功時所執(zhí)行的回調(diào)函數(shù)者吁,該函數(shù)參數(shù)position也是必須饲帅。

//第二個參數(shù)是獲取地理位置信息失敗的回調(diào)函數(shù),該函數(shù)的參數(shù)error也是必寫的灶泵,第三個參數(shù)是一些可選屬性列表(2赦邻、3個參數(shù)可省略)

}

else{

alert("該瀏覽器不支持獲取地理位置");

}

}

function showPosition(position){

var latlng=position.coords.latitude+","+position.coords.longitude;

document.getElementById("coordinates").innerHTML=latlng;

var url="http://api.map.baidu.com/geocoder/v2/?ak=C93b5178d7a8ebdb830b9b557abce78b&callback=renderReverse&location="+latlng+"&output=json&pois=0";

$.ajax({

type:"GET",

dataType:"jsonp",

url:url,

beforeSend: function(){

document.getElementById("baidu_street").innerHTML="正在定位...";

},

success:function(json){

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

document.getElementById("baidu_street").innerHTML=json.result.formatted_address;}

//將JSON返回的地址信息解析賦給id為google_street的p標簽

//formatted_address是一個字符串,包含此位置的人類可讀地址按声。通常該地址相當于“郵政地址”,有時會因不同國家/地區(qū)而存在差異签则。

},

error:function(XMLHttpRequest,textStatus, errorThrown){

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

document.getElementById("baidu_street").innerHTML=

"請求對象XMLHttpRequest: "+XMLHttpRequest+"
"+"錯誤類型textStatus: "+textStatus+"
"+"異常對象errorThrown: "+errorThrown;

//三個參數(shù):XMLHttpRequest 對象渐裂、錯誤信息、(可選)捕獲的異常對象芯义。

//如果發(fā)生了錯誤,錯誤信息(第二個參數(shù))除了得到 null 之外耘分,

//還可能是 "timeout", "error", "notmodified" 和 "parsererror".這是一個 Ajax 事件绑警。

}

});

var url = 'http://maps.google.cn/maps/api/geocode/json?latlng='+latlng+'&language=CN';

$.ajax({

type:"GET",

url:url,

beforeSend:function(){

document.getElementById("google_street").innerHTML="正在定位...";

},

success:function(json){

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

$.each(json.results,function(index,item){

//當?shù)乩砭幋a器返回結(jié)果時,會將其放在一個 (JSON) results 數(shù)組中渴频。即使未返回任何結(jié)果(例如北启,如果地址不存在),

//地理編碼器仍然會返回一個空的 results 數(shù)組场钉。

if(index==0){ //數(shù)組的第一項是formatted_adress

//$("#google_street").html(item['formatted_address']);

document.getElementById("google_street").innerHTML=item['formatted_address'];

//formatted_address 是一個字符串懈涛,其中包含該位置的可人工讀取地址。通常該地址就相當于“郵政地址”宇植,有時會因國家/地區(qū)的不同而存在差異埋心。

}

});

}

},

error:function(XMLHttpRequest,textStatus,errorThrown){

document.getElementById("google_street").innerHTML="獲取地址失敗";

}

});

}

function error(error){ ? ? ? ? ? //強調(diào)code有3個返回值,分別代表不同的錯誤

var err = error.code;

switch(err){

case 1:alert("用戶拒絕了位置服務");

case 2:alert("獲取不到位置信息");

case 3:alert("獲取信息超時");

}

}

Location();


③接入高德地圖

HTML

<div id="wordsP">

p>您的經(jīng)緯度:

<p id="latlon"></p>

<p>百度地圖</p>

<p id="baidu_position"></p>

<p>谷歌地圖</p>

<p id="google_position"></p>

</div>

<a href="map.html">點擊查看高德地圖</a>

js
function getLocation(){

if(navigator.geolocation){

navigator.geolocation.getCurrentPosition(showordP,error);

}

else{

alert("該瀏覽器不支持地理定位");

}

}

function showordP(position){

var latlng = position.coords.latitude +","+position.coords.longitude;

$("#latlon").html(latlng);

//baidu

$.ajax({

type:"GET", //一定要引號F侣取箫柳!

dataType:"jsonp",

url:"http://api.map.baidu.com/geocoder/v2/?ak=C93b5178d7a8ebdb830b9b557abce78b&callback=renderReverse&location="+latlng+"&output=json&pois=0",

beforeSend: function(){

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

},

success:function(json){

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

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

}

},

error:function(XMLHttpRequest,textStatus,errorThrown){

$("#baidu_position").html("獲取地址失敗");

}

});

//google

$.ajax({

type:"GET",

url:'http://maps.google.cn/maps/api/geocode/json?latlng='+latlng+'&language=CN',

beforeSend:function(){

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

},

success: function (json) {

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

$.each(json.results,function(index,array){ //呵我寫成position.results調(diào)了一小時沒看出來

if(index==0){

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

}

});

}

},

error:function(XMLHttpRequest,textStatus,errorThrown){

$("#baidu_position").html("獲取地址失敗");

}

});

}

function error(err){

var x=err.code;

switch(x){

case 1:alert("用戶拒絕了位置服務");

case 2:alert("獲取不到位置信息");

case 3:alert("獲取信息超時");

}

}

getLocation();

map.html

*頭部一定要引入地圖相關(guān)的信息,否則獲取不了地圖

http://cache.amap.com/lbs/static/addToolbar.js">

<div id="container"></div>

JS

function getLocation(){

if(navigator.geolocation){

navigator.geolocation.getCurrentPosition(show);

}

}

function show(position){

var lon=position.coords.longitude;

var lat=position.coords.latitude;

var map = new AMap.Map('container', {

resizeEnable: true,? //啟用地圖

zoom:16,? ? ? //放大倍數(shù)

center: [lon,lat]? ? //中心點的經(jīng)緯度

});

}

getLocation();


2016.6.15


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瞬欧,隨后出現(xiàn)的幾起案子罢防,更是在濱河造成了極大的恐慌,老刑警劉巖咒吐,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恬叹,死亡現(xiàn)場離奇詭異,居然都是意外死亡绽昼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門目溉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菱农,“玉大人,你說我怎么就攤上這事」俜荩” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵羔味,是天一觀的道長钠右。 經(jīng)常有香客問我,道長搁凸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任褥芒,我火速辦了婚禮嫡良,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寝受。我一直安慰自己,他們只是感情好京闰,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布痴怨。 她就那樣靜靜地躺著,像睡著了一般捐迫。 火紅的嫁衣襯著肌膚如雪爱葵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天赞哗,我揣著相機與錄音辆雾,去河邊找鬼肪笋。 笑死,一個胖子當著我的面吹牛藤乙,可吹牛的內(nèi)容都是我干的惭墓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼划咐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了政鼠?” 一聲冷哼從身側(cè)響起送丰,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎器躏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遏佣,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡揽浙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年馅巷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钓猬。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡敞曹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出澳迫,到底是詐尸還是另有隱情,我是刑警寧澤橄登,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布拢锹,位于F島的核電站,受9級特大地震影響面褐,放射性物質(zhì)發(fā)生泄漏取胎。R本人自食惡果不足惜湃窍,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一您市、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茵休,春花似錦手蝎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吨述,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捕儒,已是汗流浹背灵再。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翎迁,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓蒲拉,卻偏偏與公主長得像痴腌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子士聪,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

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