移動端定位

陌玉發表於2018-11-29

專案中用到了自動定位獲取當前的位置的功能,引入高德地圖中的定位和使用微信JS-SDK中的定位功能,具體程式碼如下:

h5定位:

  • 首先安裝高德外掛AMap
  • 在專案中(我們使用的是vue框架)create生命週期方法中載入高德地圖初始化方法(程式碼如下)
  created() {
    VueAMap.initAMapApiLoader({
      // 高德的key
      key: '自己申請的ID',
      // 外掛集合
      plugin: ['AMap.Autocomplete', 'AMap.PlaceSearch', 'AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PolyEditor', 'AMap.Geocoder', 'AMap.Geolocation'],
      // 高德 sdk 版本,預設為 1.4.4
      v: '1.4.4'
    })
  },

複製程式碼
  • 執行獲取當前地址的方法(此方法是非同步方法,所以點選獲取地址功能按鈕時,會有幾秒的延時,親測會有3s-10s的時間),返回值是經緯度
        var map = new AMap.Map('container', {
          resizeEnable: true
        })
        const self = this
        AMap.plugin('AMap.Geolocation', function() {
          var geolocation = new AMap.Geolocation({
            enableHighAccuracy: true, // 是否使用高精度定位,預設:true
            timeout: 5000, // 超過10秒後停止定位,預設:5s
            buttonPosition: 'RB', // 定位按鈕的停靠位置
            buttonOffset: new AMap.Pixel(10, 20), // 定位按鈕與設定的停靠位置的偏移量,預設:Pixel(10, 20)
            zoomToAccuracy: true // 定位成功後是否自動調整地圖視野到定位點
          })
          geolocation.getCurrentPosition((status, result) => {
            console.log(status, result)

複製程式碼
  • 獲取到經緯度,根據經緯度轉化為具體地址(地址的精確性存在問題,但是可以定位到大概位置)
            if (result && result.position) {
              AMap.plugin('AMap.Geocoder', function() {
                var geocoder = new AMap.Geocoder({
                  city: '010'
                })
                geocoder.getAddress([result.position.lng, result.position.lat], function(status, result) {
                  if (status === 'complete' && result.info === 'OK') {
                    self.isLoading = false
                    self.data ={
                      ...self.data,
                      province: result.regeocode.addressComponent.province, 
                      city: result.regeocode.addressComponent.city,
                      county: result.regeocode.addressComponent.district,
                      area_code: result.regeocode.addressComponent.adcode
                    }
                  }
                })
              })

複製程式碼

微信定位

  • 首先判斷是否在微信環境中然後執行如下程式碼
        wx.getLocation({
          type: 'gcj02',
          success: (res) => {
            if (res.longitude && res.latitude) {
              AMap.plugin('AMap.Geocoder', function() {
                var geocoder = new AMap.Geocoder({
                  city: '010'
                })
                geocoder.getAddress([res.longitude, res.latitude], function(status, result) {


複製程式碼

返回的longitude和latitude就是經緯度,然後呼叫高德地圖經緯度轉化為具體的方法。

第一次寫,沒有經驗。希望可以大家不吝賜教,謝謝!