HTML5获取地址位置

通过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表示百度墨卡托米制坐标。

扫描二维码关注公众号,回复: 4084768 查看本文章

    非中国地区地图,服务坐标统一使用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());

        }       

    });

}

猜你喜欢

转载自blog.csdn.net/kylett/article/details/84038168
今日推荐