uniapp之 经纬度转为地址 并 出现用户位置授权弹窗

前言

前面已经分开分析过,把经纬度转为地址,也分析过用户位置授权弹窗,那现在说的是,当这两在同一个文件中,该怎么使用,至于下面的  amap-wx.130.js  这个怎么获取的,上面的经纬度转为地址里面有提到它的来源

总代码


<template>
  <view class="bgc">
    <!-- 头部结构以及功能 -->
    <view class="page-body">
      <view class="page-section page-section-gap">
        <map style="width: 100%; height: 400px;" :latitude="latitude" :longitude="longitude" scale="18"
          show-location="true">
        </map>
      </view>
    </view>
    <view class="search-bar">
      <view class="city">
        <view style="font-size: 12px;">{
   
   {city}}</view>
      </view>
      <!-- 使用view组件模拟 input输入框的样式 -->
      <view class="search-top">
        <uni-search-bar placeholder="请输入您熟悉的站点名称" @input="search" :radius="100" cancelButton="none"></uni-search-bar>
      </view>
    </view>
    <!-- 充电状态 -->
    <!-- 中间卡片部分 -->
    <uni-card v-for="(item,index) in stationList" :key="index" style="background-color: #08110f;">

      <view @click="GoService(item)">{
   
   {item.stationName}}</view>
      <view class="state" @click="GoService(item)" style="display: flex;">
        <view class="">
          <image src="/static/quick.png" class="img">
          </image>
          <text style="margin-right: 20rpx;">{
   
   {item.fastFree}}空闲/{
   
   {item.fastTotal}} </text>
        </view>
        <view class="">
          <image src="/static/slow.png" class="img">
          </image>

          <text>{
   
   {item.slowFree}}空闲/{
   
   {item.slowTotal}}</text>
        </view>
        <view class="" style="padding-top: 20rpx;position: absolute;right: 0;margin-right: 40rpx;">
          <text style="color: red;">{
   
   {item.electricityPrice == null?0 :item.electricityPrice}}</text>
          元/度
        </view>
      </view>
    </uni-card>
  </view>
</template>

<script>
  import amap from '../../components/amap-wx.130.js'
  export default {
    components: {
      tabbar
    },
    data() {
      return {
        latitude: '',
        longitude: '',
        // 定时器
        timer: null,
        // 搜索关键词
        kw: '',
        show: true,
        showSync: true,
        city: '',
        current: 0, //默认下标
        // 对象
        stationList: [],
        searchList: [],
        pageSize: '5',
        pageNum: "1",
        total: 0, // 总数据量
        isLoading: false,
        key: 'd3c69b1f62ff......',
        amapPlugin: null
      }
    },
    onLoad() {
      this.amapPlugin = new amap.AMapWX({
        key: this.key
      });
      // this.chooseSpot()
      this.isGetLocation()
    },
    // 上拉刷新
    onPullDownRefresh() {
      this.pageNum = 1
      this.stationList = []
      this.getStationList(uni.stopPullDownRefresh)
    },
    // 下拉到底
    onReachBottom() {
      //判断当前数据是否已经是全部数据
      if (this.pageNum * this.pageSize >= this.total) return

      if (this.isLoading) return
      //如果实在请求过程中,就不允许翻页 - 节流
      //让页数加1
      this.pageNum++
      this.getStationList()
    },
    methods: {
      isGetLocation(a = "scope.userLocation") { //检查当前是否已经授权访问scope属性
        var _this = this;
        uni.getSetting({
          success(res) {
            console.log(res)
            if (!res.authSetting[a]) { //每次进入程序判断当前是否获得授权,如果没有就去获得授权,如果获得授权,就直接获取当前地理位置
              _this.getAuthorizeInfo()
            } else {
              _this.chooseSpot();

            }
          },
          fail() {
            console.log('用户拒绝授权');
          }
        });

      },
      getAuthorizeInfo(a = "scope.userLocation") { // uniapp弹窗弹出获取授权(地理,个人微信信息等授权信息)弹窗
        var _this = this;
        uni.authorize({
          scope: a,
          success() { //允许授权
            console.log('已授权');
            _this.getStationList()
          },
          fail() {
            console.log('用户拒绝');
            _this.getStationList()
          }
        })

      },
      // 高德地图的方法,获取地址
      chooseSpot() {
        this.amapPlugin.getRegeo({
          success: (data) => {
            // console.log(data, '高德地图');
            this.latitude = data[0].latitude
            // console.log(this.latitude);
            this.longitude = data[0].longitude
            // console.log(this.longitude);
            this.city = data[0].regeocodeData.addressComponent.district
            console.log(this.city, 'this。city');
            this.getStationList()
          }
        });

      },
      // 输入框 inp 属性
      search(val) {
        this.kw = val
        clearTimeout(this.timer)
        if (val.trim() === '') {
          //清空data中保存的搜索历史
          this.searchList = []
          return
        }
        this.timer = setTimeout(async () => {
          const {
            data: {
              obj,
              resCode
            }
          } = await uni.$http.post('/uniapp/pile/querySInfos', {
            stationName: this.kw,
            pageNum: this.pageNum,
            pageSize: this.pageSize,
            stationLng: this.longitude,
            stationLat: this.latitude
          })
          if (resCode !== '00100000') return uni.$showMsg()
          this.stationList = obj.list
          console.log('搜索列表数据', this.stationList)
          // this.saveHistory()
        }, 3000)
      },
      // 跳转到分包中的搜索页面
      goServiceHistory() {
        uni.navigateTo({
          url: '/subpkg/service/serviceHistory'
        })
      },
      GoService(item) {
        uni.navigateTo({
          url: `/subpkg/service/service?item=${encodeURIComponent(JSON.stringify(item))}`
        })
      },
      clickHandler() {
        console.log('111');
      },
      //选择器对应的功能实现
      onchange(e) {
        const value = e.detail.value
        console.log(value)
      },
      onnodeclick(node) {
        console.log(node);
      },
      // 跳转至地图ye
      mapClick(item) {
        uni.navigateTo({
          // url: '/subpkg/map/map'
          url: `/subpkg/map/map?item=${encodeURIComponent(JSON.stringify(item))}`
        })
      },
      // 发送请求
      async getStationList(fn) {
        this.isLoading = true
        console.log(this.longitude);
        console.log(this.latitude, this.longitude, '参数');
        console.log(this.stationLat, 'stationLat', 'home信息的经纬度111'); //
        const {
          data: {
            obj,
            msg,
            resCode
          }
        } = await uni.$http.post('/uniapp/pile/queryInfos', {
          pageSize: this.pageSize,
          pageNum: this.pageNum,
          stationLng: this.longitude,
          stationLat: this.latitude
        })
        this.isLoading = false
        //判断是不是在下拉刷新中调用,如果是,关闭
        fn && fn()
        console.log(obj, msg, resCode, '信息列表查询');
        if (resCode !== "00100000") return uni.$showMsg()
        this.stationList = [...this.stationList, ...obj.list]
        this.total = obj.total
        console.log(this.stationList);
      }
    },
  }
</script>

<style lang="scss" scoped>
  .search-bar {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100rpx;
    width: 100%;
    padding: 20rpx;
    background-color: #F5F5F7;
    // 设置定位效果为“吸顶”
    position: sticky;
    // 吸顶的“位置”
    top: 0;
    // 提高层级,防止被轮播图覆盖
    z-index: 999;
  }

  .city {
    width: 15%;
  }

  .search-top {
    flex: 1;
  }

  //快慢图标样式
  .state {
    .img {
      height: 30rpx;
      width: 40rpx;
      margin-right: 20rpx;
      margin-top: 20rpx;
    }
  }

  .sugg-list {
    padding: 10rpx;

    .sugg-item {
      font-size: 12px;
      padding: 13px 0;
      color: #000000;
      border-bottom: 1px solid #ffffff;
      display: flex;
      align-items: center;
      justify-content: space-between;

      .stationName {
        // 文字不允许换行(单行文本)
        white-space: nowrap;
        // 溢出部分隐藏
        overflow: hidden;
        // 文本溢出后,使用 ... 代替
        text-overflow: ellipsis;
        margin-right: 3px;
      }
    }
  }
</style>


在位置授权 的那篇文章中提到小程序会让审核uni.getLocation这个接口,所以 uni.getLocation这个api已经被chooseSpot这个方法替代了,这里面有写到上拉刷新,下拉加载,你们自己看看,

猜你喜欢

转载自blog.csdn.net/LJM51200/article/details/128244842
今日推荐