使用的百度地图。必须先使用百度地图获取目标位置和使用百度地图获取目标位置,然后在通过百度地图的获取我和目标的位置。由于异步的原因,所以我使用了定时器解决,不过性能肯定不好,如何使用asyncawait或者promise代替定时器呢?代码片段如下://获取目标位置varmyGeo=newBMap.Geocoder();//根据中地址名查经纬度myGeo.getPoint(scope.targetname,function(point){if(point){scope.target=point;}else{toast("您选择地址没有解析到结果!");}},scope.cityname);//获取我的位置vargeolocation=newBMap.Geolocation();geolocation.getCurrentPosition(function(r){if(this.getStatus()==BMAP_STATUS_SUCCESS){//alert('您的位置:'+r.point.lng+','+r.point.lat);scope.myadd=newBMap.Point(r.point.lng,r.point.lat);//console.log(scope.myadd,"我的位置")}else{alert("定位失败");}},{enableHighAccuracy:true})//获取我和目标的位置setTimeout(function(){if(scope.myadd!=""&&scope.target!=""){varmap=newBMap.Map("l-map");map.centerAndZoom(newBMap.Point(scope.target.lng,scope.target.lat),11);varwalking=newBMap.WalkingRoute(map,{renderOptions:{map:map,panel:"r-result",autoViewport:true}});walking.search(scope.myadd,scope.target);}},1000);
2 回答
侃侃尔雅
TA贡献1801条经验 获得超16个赞
body,html,#allmap{width:100%;height:100%;overflow:hidden;margin:0;font-family:"微软雅黑";}地址解析
//将地址解析结果显示在地图上,并调整地图视野//varmyGeo=newBMap.Geocoder();letpromiseTarget=newPromise((resolve)=>{myGeo.getPoint("霍营",function(point){if(point){resolve(point)}else{alert("您选择地址没有解析到结果!");}},"北京市");})vargeolocation=newBMap.Geolocation();letpromiseLocation=newPromise((resolve)=>{geolocation.getCurrentPosition(function(r){if(this.getStatus()==BMAP_STATUS_SUCCESS){resolve(r.point)}else{alert('failed'+this.getStatus());}},{enableHighAccuracy:true})})Promise.all([promiseTarget,promiseLocation]).then(([target,location])=>{console.log(target,location,5)//百度地图API功能varmap=newBMap.Map("allmap");map.centerAndZoom("北京",12);//初始化地图,设置城市和地图级别。alert('从大渡口区到江北区的距离是:'+(map.getDistance(target,location)).toFixed(2)+'米。');//获取两点距离,保留小数点后两位varpolyline=newBMap.Polyline([target,location],{strokeColor:"blue",strokeWeight:6,strokeOpacity:0.5});//定义折线map.addOverlay(polyline);//添加折线到地图上})
明月笑刀无情
TA贡献1828条经验 获得超4个赞
你可以把获取地理位置的封装成一个方法,返回一个promise对象,然后在外部解析的地址的方法用asny,await去取获取地理位置的方法,这样就可以实现同步了。