uniapp h5使用定位获取当前城市

项目需求:uniapp做的h5打开首页后需要在右上角获取当前城市

看来一下官方的api,h5根本拿不到当前城市。
于是我想到了搜狐公布的接口,很不错,可惜手机不在wifi的情况下只能拿到CHINA这个值。
那咋整,当然我只能调第三方地图的sdk来获取了。

方法一:高德地图
这里虽然选择高德地图,但是怎么使用还是个坑,搜了很多文档,相关如下
1、注册高德地图。进入控制台
2、找到应用管理,创建新应用

在这里插入图片描述
在这里插入图片描述

3、创建好以后,为应用添加key,点击添加

在这里插入图片描述
添加完以后就能看到key了
在这里插入图片描述

4、接下来我们去新建一个html,直接上代码,代码中在页面打开时直接获取定位,获取成功后自动存到本地,以供我们使用
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" charset="utf-8">
    <title>获取定位</title>
</head>
<body>
    <div id='info'>
		<div id="">
			<div class="imgdiv"><img src="./img/cityloading.png" ></div>
			<div id="city">正在获取您当前的位置...</div>
		</div>
	</div>
	
	<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你高德的key值&plugin=AMap.CitySearch"></script>
	
	<script type="text/javascript">
		document.addEventListener('DOMContentLoaded',function(){
			var returnBase = "http://localhost:8080/ysq/h5/cxysq/test/";
			//获取用户所在城市信息
			function showCityInfo() {
				//实例化城市查询类
				var citysearch = new AMap.CitySearch();
				//自动获取用户IP,返回当前城市
				citysearch.getLocalCity(function(status, result) {
					console.log(result)
					if(status === 'complete' && result.info === 'OK'){
						console.log(result.city)
						//城市存到本地
						localStorage.setItem('cityLocation', result.city);
					}
				});
			}
			showCityInfo();
		},false)
	</script>
</body>
</html>
特别提示:一定要把html里这行代码的key值换成你自己的
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你高德的key值&plugin=AMap.CitySearch"></script>
5、单独在浏览器上运行一下我们的html,打开控制台key看到

在这里插入图片描述

6、html是获取到了,但是怎么在uniapp里面拿到呢,也许大家有更好的办法,但是我查了很多文档确实只有我自己的这个方法比较靠谱

由于我们是html页面,只能通过web-view组件才能实现我们html页面可以在uniapp的.vue文件中显示,说到这里大家可以去看一下官方的uniapp对web-view的讲解。其实很简单,实现代码如下:

首先我为我的html添加了页面的样式和动画,大家可以根据自己的需求去写,我的效果是这样的:
在这里插入图片描述
那么我们来看看我的目录结构,其实就是普通的路径
在这里插入图片描述
blog.csdnimg.cn/20200512175448966.png)

7、在index.vue里写web-view
<web-view src="../../hybrid/html/location.html"></web-view>

效果很明显可以看到,我们的这个html显示在我们当前的index.vue里面了,想我这里就不放图了,自己测测,一定要显示了再往下看,不显示证明你的web-view没写对。

8、继续往下看在这里插入图片描述大家可以看到我写了个if判断ifCity

在这里插入图片描述

9、业务逻辑是这样的,页面打开时先获取当前定位,然后把定位城市存到本地,所以每次页面打开时先去获取存到本地的城市,如果有就ifCity不变,默认为false,不用打开这个执行这个web-view组件,如果没有ifCitytrue,执行这个web-view组件,html就会把城市存到本地。

这里我用了一个比较笨拙的办法,那就是setTimeout,因为我发现如果一起执行的话,我uniapp是不会等web-view存到本地再去获取的,他们会一起执行,所以得先让ifCity = true;存到本地后我再去获取,因为这样所以我延迟了1800毫秒后再去执行aciquirePlace()方法

onShow() {
	var that = this;
	if(!that.city || that.city == ''){
		// 获取当前位置
		that.ifCity = true;
		setTimeout(function(){
			that.aciquirePlace();
		},1800)
	}else{
		that.city = uni.getStorageSync("city");
	}
	that.queryCommunity(that.city);
},
methods: {
// 获取当前城市
	aciquirePlace(){
		var that = this;
		var cityLocation = uni.getStorageSync('cityLocation');
		if(cityLocation){
			that.ifCity = false;
			that.city = cityLocation;
			that.queryCommunity(that.city);
		}else{
			that.ifCity = false;
			uni.showToast({
			    title: '定位获取失败,请手动选择',
				icon:'none',
			    duration: 2000
			});
		}
	}
}
方法二:腾讯地图
如果没有必须使用高德的需求,建议使用腾讯,简单快捷,而且uniapp官方也是讲H5最好使用腾讯地图。
1、先使用官方的api获取当前经纬度(在电脑本地无法获取,需要手机上测试)
uni.getLocation({
    type: 'wgs84',
    success: function (res) {
		console.log(res)
		that.longitude = res.longitude;
		that.latitude = res.latitude;
		that.loAcquire(that.longitude,that.latitude)
    }
});
2、使用$jsonp请求微信官方提供的获取定位的接口
loAcquire(longitude,latitude){
	let that = this;
	uni.showLoading({
	    title: '加载中',
		mask:true
	});
	let str =  `output=jsonp&key=你的key&location=${latitude},${longitude}`
	this.$jsonp('https://apis.map.qq.com/ws/geocoder/v1/?'+str,{}).then(res=>{
	  console.log(res);
	  uni.hideLoading();
	  if(res.status == 0){
		  that.locationName = res.result.address; //当前定位
	  }
	})
},

说明:微信key申请流程和高德差不多,还有jsonp的使用具体自行查下资料,我相信这点小事难不倒你,一起加油吧打工人。

具体的实现过程就是这样,大家有觉得什么不对的地方获取有更好的地方还原留言
写作不易,本篇文章为原创制作,如有抄袭或者使用转载的请注明来源,感谢。
  • 10
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
Uniapp 是一款基于Vue.js开发的跨平台应用开发框架,可以让我们使用Vue.js开发一次,同时发布到多个平台,包括iOS、Android和H5等。 要在Uniapp使用天地图获取当前定位,我们可以按照以下步骤进行: 第一步,安装相关插件。 在Uniapp项目的根目录下,通过命令行运行以下命令来安装`tmt`插件: ``` npm install tmt -S ``` 第二步,配置天地图API。 在`main.js`文件中,引入并配置天地图的API密钥。我们可以从天地图官网获取到API密钥,然后在`main.js`中添加以下代码: ```javascript import TMT from 'tmt'; Vue.use(TMT, { ak: '你的天地图API密钥' }); ``` 第三步,获取当前定位。 我们可以在需要获取定位信息的页面中,使用以下代码来获取当前定位信息: ```javascript export default { data() { return { location: null }; }, methods: { getLocation() { this.$tmt.getLocation().then(res => { this.location = res; console.log(this.location); }).catch(error => { console.error('获取定位失败:', error); }); } }, mounted() { this.getLocation(); } } ``` 在上述代码中,我们使用了`$tmt`来调用插件提供的方法`getLocation()`来获取当前定位信息。获取成功后,定位信息将存储在`location`变量中。 以上就是使用Uniapp获取当前定位的简要步骤。通过安装插件、配置API密钥和调用相关方法,我们就可以在Uniapp中轻松地获取当前定位信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值