通过HTML5的geolocation来获取地理位置,但要注意的是这里获取的原始坐标,直接用该坐标在百度地图上显示不准确,需要进行转换。
一、用HTML5的geolocation获取原始地址
<script type="text/javascript">
function getLocation(){
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(showPosition,showError);
}else{
alert("浏览器不支持地理定位。");
}
}
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;
}
}
function showPosition(position){
var lat = position.coords.latitude; //纬度
var lag = position.coords.longitude; //经度
alert('纬度:'+lat+',经度:'+lag);
}
注意:用原生HTML5获取经纬度时,在苹果手机上不能正常获取。原因是苹果手机在升级为IOS10以上后,只允许https的网页获取地理位置,若是http网站则获取失败。这时若继续用http网站,可采用百度地图API(参考后面的第三项问题)或其他地图API来获取。
二、用百度地图API进行转换
先附百度地图API对坐标转换的介绍:
目前国内主要有以下三种坐标系:
WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
GCJ02:又称火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标。
非中国地区地图,服务坐标统一使用WGS84坐标。
其他坐标转百度坐标
百度对外接口的坐标系为BD09坐标系,并不是GPS采集的真实经纬度,在使用百度地图JavaScript API服务前,需先将非百度坐标通过坐标转换接口转换成百度坐标。 坐标转换、批量坐标转换示例详见JavaScript API示例。
注意:请勿使用其他非官方转换方法!!!
//通过百度地图API将原始经纬度转换为真实的经纬度
function translate(lng,lat){
var ggPoint = new BMap.Point(lng,lat);//创建标点
//坐标转换完之后的回调函数
translateCallback = function (data){
if(data.status === 0) {
var point = data.points[0];
//真实的纬度
var trans_lat = point.lat;
//真实的经度
var trans_lng = point.lng;
}
}
var convertor = new BMap.Convertor();//这个类就是转换的对象
var pointArr = [];
pointArr.push(ggPoint);
convertor.translate(pointArr, 1, 5, translateCallback)//通过调用回调函数来进行转换。
}
三、用百度地图API获取当前位置
function getLocation(){
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
// alert('您的位置:'+r.point.lng+','+r.point.lat);
var trans_lat = r.point.lat;//纬度
var trans_lng = r.point.lng;//经度
//自定义代码
}else {
alert('failed'+this.getStatus());
}
});
}