1. 程式人生 > >EA&UML日拱一卒-微信小程式實戰:位置鬧鈴 (5)-顯示所在位置的資訊

EA&UML日拱一卒-微信小程式實戰:位置鬧鈴 (5)-顯示所在位置的資訊

假設我們指定了多個監控點,接下來的需求就是給每個監控點取名字。如果是手動輸入的話,會比較麻煩。所以位置鬧鈴再向前走一步,從地圖上取得監控點所在位置的資訊作為監控點的名稱。

畫面說明


當我們選定監控點以後,該處的資訊會在下面的列表中表示出來。通過上下滾動列表中的內容,使用者就可以選擇合適的資訊作為監控點的名稱。

setpoint.wxml

為了看起來方便一些,這裡只選取新增加的部分。

<picker-viewindicator-style="height:1.5em;"class="info_area"value="{{info_index}}"bindchange="pikerChange">

<picker-view-column>

<viewwx:for="{{pois.pois}}"wx:for-item="pois"wx:key="index">{{pois.title}}</view>

</picker-view-column>

</picker-view>

piker-view顯示的是pois.pois中的資料,當用戶滾動它的時候,setpoint.js中的pikerChange方法會被呼叫,而當前專案的索引就是引數。

util.js

在util.js中增加了一個函式用於取得指定地點的資訊。程式碼如下:

function

getPoisByLocation( latitude, longitude, callback ) {

// 具體json 返回格式可自行參考騰訊地圖API介面文件

varkey ="M6VBZ-BPRHX-YPK45-7Q4GC-Z3F7T-7YFO7";  //需要到http://lbs.qq.com/申請

varurl ="https://apis.map.qq.com/ws/geocoder/v1/?location="+ latitude +","+ longitude +"&key="+ key+"&get_poi=1";

vardefaultUrl ="http://www.apayado.com/pois.json?"

+newDate().getTime();

 wx.request( {

   url: url,

   success:function( res ) {

     callback(res.data.result);

   },

   fail:function(res) {

     getDefaultPoiData(defaultUrl,function(res) {

       callback(res);

     });

   }

 });

}

這段程式碼來自【小程式,巧應用:微信小程式開發實戰(第2版)】,這裡稍加修改。

這個函式通過wx.request訪問騰訊的位置服務,當該服務呼叫成功以後,以位置服務的返回值作為引數呼叫callback函式。而這個callback函式又是利用者在呼叫getPoisByLocation函式時傳進來的。

另外一點,從微信小程式訪問騰訊位置服務時需要做另外兩件事情:一是到http://lbs.qq.com申請訪問時的使用金鑰(KEY);另外一個是在小程式設定畫面指定允許小程式訪問的域名。設定畫面如下,具體看伺服器域名設定的部分。

setpoint.js

取得和表示地理資訊

在地圖視野發生變化的時候,下面的函式就會被架構呼叫。

regionChanged:function(e) {

   console.log("setpoints.js regionChanged")

varthat =this

this.mapCtx.getCenterLocation ({

     success:function(res) {

type:'gcj02',// 返回 可以 用於 wx. openLocation 的 經緯度

 util.getPoisByLocation(res.latitude, res.longitude,function(data){

         console.log(data)

         that.setData({

          pois:data,

         });

       })

       app.globalData.currentAlarm = {

           longitude: res.longitude,

           latitude: res.latitude

       };

     }

   })

 },

關注黃色背景的部分。getPoisByLocation成功以後,通過setData函式,資料被傳遞給pois成員。從pois到畫面的工作是架構完成的,程式設計師不需要操心。

處理使用者選擇操作

pikerChange:function(e) {

constval = e.detail.value

   app.globalData.currentAlarm.title =this.data.pois.pois[val]

 },

這個函式的引數是使用者所選專案的索引,通過這個索引選擇合適的資訊傳遞給監控點。

參考資料

WebService API

http://lbs.qq.com/webservice_v1/guide-gcoder.html

KEY申請

http://lbs.qq.com

寫在文章的最後

既然已經讀到這裡了,拜託大家再用一分鐘時間,將文章轉發到各位的朋友圈,微信群中。本公眾號的成長需要您的支援! 以上就是今天的文章,歡迎點贊並推薦給您的朋友! 閱讀更多更新文章,請掃描下面二維碼,關注微信公眾號【面向物件思考】