使用高德定位API :
- AMap.Map('iCenter')
- AMap.CitySearch()
先在高德開放平台注冊申請定位權限的key。 網站;高德開放平台
在需要定位的頁面引入有定位key的script
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<title>基本引入展示</title>
<script src="https://webapi.amap.com/maps?v=1.4.8&key=您申請的key值"></script>
</head>
<body>
<div id="container"></div>
</body>
</html>
使用高德定位API
需求:蘋果設備使用IP定位,其他使用gps定位
function getlocation() {
var u = navigator.userAgent;
var ua = navigator.userAgent.toLowerCase();
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android終端
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端
//GPS定位
function locationForGPS() {
/*********跟蹤標記**********/ console.log('GPS定位開始+++');
var map, geolocation;
//加載地圖,調用瀏覽器定位服務
map = new AMap.Map('iCenter');
map.plugin('AMap.Geolocation', function() {
geolocation = new AMap.Geolocation({
enableHighAccuracy: false,//是否使用高精度定位,默認:true
timeout: 10000, //超過10秒后停止定位,默認:無窮大
});
map.addControl(geolocation);
geolocation.getCurrentPosition();
//getCityInfo是高德GPS定位里面的一個方法,先返回ip定位數據,由於IP定位有可能不准確,所以后面用GPS數據修正
//
geolocation.getCityInfo(function(status,result){
/*********跟蹤標記**********/ console.log('與GPS同步IP定位開始,進行數據寫入+++');
if (status === 'complete' && result.info === 'SUCCESS') {
/*********跟蹤標記**********/ console.log('同步IP定位成功,進行數據寫入+++');
if(isNull(sessionStorage.getItem('autouserchooselocationct'))){
/*********跟蹤標記**********/ console.log('未檢測檢查有上一次定位數據,進行數據寫入+++');
let cityAdcode=result.adcode;
let cityName=result.city;
sessionStorage.setItem('autouserchooselocationct', cityName);
sessionStorage.setItem('autouserchooselocationcode', cityAdcode);
/*********跟蹤標記**********/ console.log('同步IP定位結束,進行數據寫入完成+++');
}
}
});
AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息
AMap.event.addListener(geolocation, 'error', onError); //返回定位出錯信息
});
//GPS定位成功
function onComplete(data) {
console.log(data)
/*********跟蹤標記**********/ console.log('GPS定位啟動+++');
//gsp定位精確到區,返回的adcode精確到了城市下屬的區域,
//想要獲取城市的abcode還需要使用高德的另一個API,城市區域查詢
let cityName=data.addressComponent.city;
let geocoder = new AMap.Geocoder({});
//地理編碼,返回地理編碼結果,
geocoder.getLocation(cityName, function(status, result) {
if (status === 'complete' && result.info === 'OK') {
/*********跟蹤標記**********/ console.log('GPS定位成功,處理定位數據+++');
/*********跟蹤標記**********/ console.log('進行數據寫入,覆蓋同步IP的數據+++');
let cityAdcode=result.geocodes[0].adcode;
sessionStorage.setItem('autouserchooselocationct', cityName);
sessionStorage.setItem('autouserchooselocationcode', cityAdcode);
/*********跟蹤標記**********/ console.log('GPS定位結束,進行數據寫入完成+++');
}
});
}
//GPS定位失敗
function onError() {
/*********跟蹤標記**********/ console.log('GPS定位失敗開始啟用ip定位+++');
locationForIp(true);
/*********跟蹤標記**********/ console.log('gps-ip++...')
}
}
//IP定位
function locationForIp(tap) {
/*********跟蹤標記**********/if(tap){ console.log('GPS定位失敗開始啟用ip定位+++');}
/*********跟蹤標記**********/ console.log('ip定位開始+++');
var citysearch = new AMap.CitySearch();
//自動獲取用戶IP,返回當前城市
citysearch.getLocalCity(function (status, result) {
if (status === 'complete' && result.info === 'OK') {
if (result && result.city && result.bounds) {
let GetUserLocation = result.city,
GetUserLocationcode = result.adcode;
/*********跟蹤標記**********/console.log('ip定位成功,開始檢查是否有上一次定位數據+++');
if(isNull(sessionStorage.getItem('autouserchooselocationct'))){
/*********跟蹤標記**********/console.log('ip定位成功,未檢測檢查有上一次定位數據,進行數據寫入+++');
sessionStorage.setItem('autouserchooselocationct', GetUserLocation);
sessionStorage.setItem('autouserchooselocationcode', GetUserLocationcode);
/*********跟蹤標記**********/console.log('ip定位成功,進行數據寫入結束+++');
}
}
} else {
/*********跟蹤標記**********/console.log('ip定位失敗,進行數據寫入結束+++');
}
})
}
if(isiOS){
/*********跟蹤標記**********/console.log('ios設備啟用IP定位');
locationForIp(false);
}else {
/*********跟蹤標記**********/console.log('非ios設備啟用GPS定位');
locationForGPS()
}
}
};