cassiehuang / study

学习笔记整理
2 stars 0 forks source link

使用百度地图api #38

Open cassiehuang opened 5 years ago

cassiehuang commented 5 years ago
  1. 使用api进行ip定位
    • 通过jsonp(callback)解决跨域问题
    • axios 不支持jsonp跨域,使用ajax来解决
  2. 使用更精确的经纬度定位
    
    const getPosition = () => {
    if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition, showError);
    } else {
    alert("浏览器不支持地理定位");
    }
    }
    const 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;
    }
    }

const showPosition = (position) => { const map = new BMap.Map("allmap"); const point = new BMap.Point(position.coords.latitude, position.coords.longitude); map.centerAndZoom(point,12);

const geolocation = new BMap.Geolocation(); geolocation.getCurrentPosition(function(r){ if(this.getStatus() == BMAP_STATUS_SUCCESS){ var mk = new BMap.Marker(r.point); map.addOverlay(mk); map.panTo(r.point); alert('您的位置:'+r.point.lng+','+r.point.lat); } else { alert('failed'+this.getStatus()); } }); }


* 解决BMap is not defined问题,通过webpack配置外部资源
externals: {
    jquery: 'jQuery',  // 防止将import的包导到bundle,而是在运行时再从外部取获取这些依赖
    BMap: "BMap",
  },
cassiehuang commented 5 years ago

百度地图api

const getPosition = cb => {
  $.ajax({
    url: 'http://api.map.baidu.com/location/ip?ak=ak&callback=showLocation',
    dataType: 'jsonp', // 指定服务器返回的数据类型
    success(res) {
      cb(res);
    },
  });
};
export default getPosition;