uniapp选个城市定个位置你会了吗(四 picker选择城市的使用并获取定位位置)

1,281 阅读4分钟

uniapp选个城市定个位置你会了吗(四 picker选择城市的使用并获取定位位置)

先看一下我们最终实现的效果

QQ_1722439331080.png

1、认识picker选择器

接下来我们实现一下省市区选择器的下拉操作

官方的介绍在这里 uniapp.dcloud.net.cn/component/p…

picker选择器是从底部弹起的滚动选择器。支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器。

这里我们使用的就是他的省市区选择器类型,全部技术就是在uniapp之中采用vue3写法利用picker实现一个省市区选择器,并且我们不使用外部插件来实现。

2、使用选择器picker

👉 接下来我们可以先在文件下common里面新建一个文件city.json ,这个文件部分专门来存放城市数据,这里我们简单的举个例子。

我们的城市下面的数据是这样子的

image.png

3、搭建我们的城市选择

最后我们的效果是这样子的:

image.png

image.png

接下来我们就去搭建最简单的选择城市

👉 接下来我们搭建一个最简单的部分,选择城市然后确认城市的弹出窗

这里我们直接拿微信给我们提供的picker部分进行实现,地址在这里 uniapp.dcloud.net.cn/component/p…

  <picker 
        mode="selector" 
        :range="cities" 
        :value="selectedCityIndex" 
        @change="onCityChange">
        <view class="picker">
          {{ selectedCity || '请选择城市' }}
        </view>
      </picker>

然后我们写一下其中数据的含义

  • CityData 这个就是我们在选择范围内的一个数组数据
  • selectedCityIndex 是我们绑定的值,最后通过这个我们拿到其中选择的城市数据
  • @change="onCityChange"事件,我们通过这个去每次监听数据的变化,然后赋值

👉 然后我们完善一下参数和下面方法的完善

<script setup>
import { ref } from 'vue';
    const cities = ['北京', '上海', '广州', '深圳', '杭州'];
    const selectedCityIndex = ref(0);
    const selectedCity = ref(cities[selectedCityIndex.value]);
    const onCityChange = (event) => {
      const index = event.detail.value;
      selectedCityIndex.value = index;
      selectedCity.value = cities[index];
    }
</script>

然后看一下我们的效果图

image.png

输出参数然后我们查看一下

console.log(selectedCity.value,'selectedCity.value');

image.png

这里最后我们拿到的selectedCity 就是我们拿到的值。也就是我们的城市位置的下拉其实已经好了 !

4、获取当前位置

接下来我们简单做一个搜索类型的部分,展示我们如何获取定位,并且回显

👉 这里我们先搭建一下布局,左侧是门店的数量,右侧是我们获取地理位置,这里我们使用一下icon,相关部分的官方文档在这里:

uniapp.dcloud.net.cn/component/u…

然后我们使用的时候需要先进行下载和安装,然后导入我们的HbuildX部分

ext.dcloud.net.cn/plugin?name…

这里就显示我们已经导入了,接下来我们就可以进行使用了

image.png

<uni-icons type="contact" size="30"></uni-icons>

这里我们写成这样子就行,然后我们预览一下

image.png

👉 这里我们就可以完善点击事件了,点击的时候获取当前的位置

<view class="right locationbox" @click="getLocationAuth">
        <view class="txtlocation">重新获取位置</view>
        <uni-icons class="locaicon" type="location"  size="20"></uni-icons>
</view>


补充上我们的位置 

接下来就是实现点击然后去获取我们的位置,但是这里需要注意,就是如果我们使用的是Web平台本API,之前调用了腾讯地图的gcj02坐标免费转换接口,该接口从2024年7月18日起被腾讯逐步下线。相关的文档部分在这里:

uniapp.dcloud.net.cn/api/locatio…

👉 开通相关API权限

这里需要注意,在小程序之中使用定位是需要官方给我们授权的,必须去后台先开通权限。

因为这次定位功能使用的是 GPS 来定位的,这就需要获取用户的地理位置信息。在小程序中,要获取用户的地理位置,微信官方提供了部分 API ,这些 API 有权限要求,先登陆 小程序后台 去申请。

👉 提交申请 登陆后,按路径「开发」-「开发管理」-「接口设置」中找到相关 API ,填写你使用 API 的理由,提交申请即可。

这里我发现应该是这两种都可以使用

image.png

官方给我们最简单的调用是这样子的

uni.getLocation({
	type: 'wgs84',
	success: function (res) {
		console.log('当前位置的经度:' + res.longitude);
		console.log('当前位置的纬度:' + res.latitude);
	}
});

个人未认证,然后这里没有通过,哎,只好简单写写代码实现一下了

主要部分其实也挺简单的!

uni.getLocation({
    type: 'gcj02',
    geocode: true,
    isHighAccuracy: true,
    accuracy: "best", // 精度值为20m
    success: function(res) {
            let lat = res.latitude;
            let lng = res.longitude;
            let key = '申请到的key'; //申请地址:https://lbs.qq.com/dev/console/application/mine
            uni.request({
                    url: 'https://apis.map.qq.com/ws/geocoder/v1/?location=' + lat + ',' + lng + '&key=' + key,
                    method: "GET",
                    success(ress) {
                            let data = ress.data; //获取到所有定位的数据
                            let CityName = ress.data.result.address_component.city
                            that.CityName = CityName
                            let Street = ress.data.result.address_component.street
                            that.CityName = Street
                            uni.setStorage({
                                    key: 'City_Name',
                                    data: Street
                            })
                    },
                    fail() {
                            uni.showToast({
                                    'title': '对不起,数据获取失败!',
                                    'icon': 'none'
                            })
                    }
            })
    },
})

ok!

5、门店位置和列表

接下里开发我们的门店位置和列表部分

这里就比较简单了,直接放效果!

QQ_1722439331080.png