有了这些地址,那么你就可以根据你的需要选择一个地图进行以下操作
申请流程在上面的官方链接里都有,我就不一一放图展示了。
腾讯的操作是:控制台->应用管理->我的应用->添加key->勾选WebServiceAPI->保存
高德地图的操作跟腾讯地图的差不多,都是在自己的应用里
但是有一点要注意!!!
webserviceAPI配置下面的域名白名单一定不要填写,保留为空就对了,这个地方的白名单在小程序后台配置就可以了。否则地图在使用中会报错。
这里补充以下官方常见问题链接地址
腾讯提供了两个SDK版本:1.1和1.2,这里我两个都放链接,个人觉得用最新的就ok了
下载好后就按官方文档说的,在项目根目录下创建lib文件夹,把你要用的js文件(比如你用的腾讯地图,那就把刚下载的腾讯地图js文件丢进去)丢进去。
如图我用的腾讯地图,那么我就把那两个js文件丢进去就行了,事实上只需要一个,min是压缩过的,不带min的是正常的js文件,用哪个都可以跑本地跟线上发包。
但是高德的压缩文件貌似是有问题的,我引用就报错,用正常的js文件就没事。各位按需要用就好。
4、开发前的准备工作已经好了,那么,就到页面引用Map地图实战了
首先先看看效果图
注意下哈:
1、使用腾讯地图或高德地图,获取自身定位用到的uni.getLocation()配置的type用gcj02比较精准,如果用wgs84,它是根据你的ip返回经纬度,相比于gcj02没有那么精准。何况你都引用js-sdk文件来开发了,不用gcj02定位那不白瞎了吗
2、另外,在本地运行,在开发工具上获取到的经纬度都是按市中心的定位,并不是你准确的位置。需要到真机运行才是返回你自己所在位置的准确经纬度。
好了,开始上代码!
//Css
//center-point-box、center-point样式是为了让中心点图片始终居中定位,这样就实现了拖动地图时中心点markers消失的问题,也省了设置中心点markers。
//cover-view-box是定位到我的盒子
.map{position:relative;}
.cover-view-box{position:absolute;top:500rpx;right:60rpx;}
.center-point-box{position:absolute;top:280rpx;right:50%;}
.center-point{width:40rpx;height:60rpx;}
.be-back-myself{width:60rpx;height:60rpx;}
//onReady内写入如下
this.mapContext=uni.createMapContext('map',this)
//methods内写入如下方法
//获取位置信息asyncgetLocationInfo(){letthat=thisreturnnewPromise((resolve)=>{//位置信息默认数据letlocation={longitude:0,latitude:0,province:"",city:"",area:"",street:"",address:"",};uni.getLocation({type:"gcj02",altitude:true,success(res){location.longitude=res.longitudelocation.latitude=res.latitude//腾讯地图that.longitude=location.longitudethat.latitude=location.latitudeqqmapsdk.reverseGeocoder({location,success(response){letinfo=response.result;location.province=info.address_component.province;location.city=info.address_component.city;location.area=info.address_component.district;location.street=info.address_component.street;location.address=info.address;resolve(location);}})}})})},
//以上用到的属性均在data中定义,import的js文件在script头部引入定义当前页面全局属性,方法均写入method内,//其中获取自身定位可在onReady、onLoad、onShow内使用,若是组件内使用map,在created或者mouted都可以执行获取定位方法。
再补充点我踩过的坑
1、高德地图根据经纬度调用api报错UncaughtError:USERKEY_PLAT_NOMATCH(10009)