• 租房小程序自动定位城市


    微信小程序提供的只有获取到经纬度的接口没有直接获取城市的接口

    方案一

    小程序调用wx.getLocation()获取经纬度,然后调用高德的接口获取当前城市,代码如下:

    // findLocation(){
    //  uni.showLoading({title:"定位中....",mask:true})
    //  uni.getLocation({
    //      type: 'gcj02',
    //      success: async res => {
    //          let { longitude, latitude } = res;
    //          let result = await wxGetAddress({ longitude, latitude });
    //          let province = result.regeocodeData.addressComponent.province
    //          let cityName = result.regeocodeData.addressComponent.city
    //          this.locationCity = cityName
    //          let lifeData = uni.getStorageSync('lifeData');
    //          let vuex_city = lifeData.vuex_city
    //          if(!vuex_city){
    //              this.$u.vuex('vuex_city', cityName);
    //          }
    //          uni.hideLoading();
    //      }
    //  });
    // }
    
    // import amapFile from '../../libs/amap-wx.130.js'
    // const myAmapFun = new amapFile.AMapWX({
    //  // 申请的高德key值
    //  key: '4ef3b3b42d8bb823529908dc93414127'
    // }); //创建一个实例化对象
     
    // export default function wxGetAddress({longitude,latitude}) {
    //     //根据传递进来经纬度进行反解析,调用的是高德给的方法
    //  return new Promise((resolve, reject) => {
    //      myAmapFun.getRegeo({
    //          location: `${longitude},${latitude}`,
    //          success: (res) => {
    //              resolve(res[0])
    //          },
    //          fail: (err) => {
    //              resolve(null)
    //          }
    //      })
    //  })
    // }
    

    方案二

    微信调用wx.getLocation()获取经纬度,审核过于麻烦,审核了很多次都不给通过,果断放弃。因此开源字节的租房小程序使用ip进行城市定位。代码如下:

    findLocation(){
    	let that = this
    	uni.showLoading({title:"定位中....",mask:true})
    	this.$u.get("/api/profile/getRealCity").then(obj => {
    		let cityName = obj.msg
    		if(cityName){
    			this.locationCity = cityName
    			let lifeData = uni.getStorageSync('lifeData');
    			let vuex_city = lifeData.vuex_city
    			if(!vuex_city){
    				this.$u.vuex('vuex_city', cityName);
    			}
    			uni.hideLoading();
    		}else{
    			uni.request({
    				// url:'https://pv.sohu.com/cityjson?ie=utf-8',
    				url:'https://tianqiapi.com/ip?version=v9&appid=23035354&appsecret=8YvlPNrz',
    				success(resp) {
    					let ip = resp.data.ip
    					that.$u.get("/api/profile/getRealCityByIP?ip="+ip).then(obj => {
    						let cityName = obj.msg
    						if(cityName){
    							that.locationCity = cityName
    							let lifeData = uni.getStorageSync('lifeData');
    							let vuex_city = lifeData.vuex_city
    							if(!vuex_city){
    								that.$u.vuex('vuex_city', cityName);
    							}
    							uni.hideLoading();
    						}else{
    							that.$mytip.toast('定位失败')
    						}
    						uni.hideLoading();
    					});
    				}
    			})
    		}
    	});
    }
    

    通过方案二即可满足定位需求,需注意以下几个点:

    1、我们的nginx被微信代理后无法获取到真实ip,因此使用第三方接口获取ip

    2、微信小程序只能使用备案的域名,我们需要将获取ip的接口添加到白名单中

    3、获取到ip后,再请求后台地址得到城市信息

    以上代码在我们的开源项目中都能获取到,感兴趣的小伙伴可以前往我们的开源仓库

    如若转载,请注明出处:开源字节   https://sourcebyte.cn/article/207.html

     

  • 相关阅读:
    技术分享 | web 控件的交互进阶
    基于Java的客户资料管理系统的设计与实现
    【Java】常用API——ArrayList类
    区块链实训教程(3)--使用虚拟机安装Ubuntu
    为什么要学习GoF设计模式?
    .NET 中使用 OpenTelemetry Traces 追踪应用程序
    Java 字节流写数据如何实现换行,以及如何追加填写数据
    【Leetcode】758. Bold Words in String
    C语言 | Leetcode C语言题解之第134题加油站
    【K8S系列】Weave Net 故障排除的常见问题和解决方案
  • 原文地址:https://blog.csdn.net/qq_35634154/article/details/126118747