支付寶小程序開發——獲取位置API沒有城市區號的最佳處理方案


 

前言:

需要對城市區號進行判斷,但是支付寶小程序提供的my.getLocation() API返回的數據中只有6位的城市行政代碼,諸如:深圳(440300),並沒有區號(0755),那么怎么辦呢?

需求分析:

通常會想到兩種方法,一個是調用第三方地圖,但這個對接調用就太麻煩了(還得注冊賬號),另一種就是找插件轉換了。

第一種方法就不考慮了,第二種么,百度了下,貌似沒有這種插件,鑒於之前做過不少接口文檔或這表格數據轉換js格式數據或者標簽的小工具,想了下原理都差不多,索性自己做了個工具進行轉換。

工具可以自己做,但是還需要數據來匹配城市行政編碼和區號,那么就需要一份包含全國所有城市行政編碼以及區號的文檔了。

下載行政區比那嗎與城市區號相關的文檔:

繼續百度,只是看到別人寫的示例數據,但是自己寫數據不現實啊(也不靠譜)。最后去高德看了下,找到了《行政區編碼與城市編碼表》,網頁地址:https://lbs.amap.com/api/javascript-api/download:

下載解壓后,是如下所示的電子表格,剛好包含了城市名、行政編碼、區號,剛好夠用,不多不少。

萬事俱備,只欠東風,下面開始寫工具,借東風。

工具代碼如下:

 1 <!DOCTYPE html>
 2 <html>
 3 
 4     <head>
 5         <meta charset="UTF-8">
 6         <title></title>
 7     </head>
 8 
 9     <body>
10         <div id="app">
11             <div class="fileBtn">
12                 <p>
13                     <textarea v-model="textarea" placeholder="請復制粘貼excel表格中的城市名,行政編碼,區號數據" cols="30" rows="20"></textarea>
14                 </p>
15                 <button id="btnTitleTrans" @click="btnTitleTrans">生成json數據</button>
16             </div>
17             <article>
18                 <h4>生成代碼預覽</h4>
19                 <ul>
20                     <li v-for="item in fileData">{{item}}</li>
21                 </ul>
22             </article>
23         </div>
24     </body>
25     <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
26     <script>
27         Vue.config.silent = false;
28         Vue.config.devtools = true;
29         var app = new Vue({
30             el: '#app',
31             data: {
32                 fileData: [],
33                 textarea: "",
34                 label: "td",
35                 subStr: "",
36                 supStr: ""
37             },
38             methods: {
39                 btnTitleTrans() {
40                     //讀取完成后,數據保存在對象的result屬性中
41                     this.fileData = this.textarea.split("\n") //根據換行進行截取
42                     for (var i in this.fileData) {
43                         //不同行數據的循環
44                         var str = this.fileData[i]
45                         var tds = str.split('    ') //對同行的單元格進行分割
46                         //將電子表格同行三個單元格的數據組合成{cityName:'北京市',code:'110000',cityCode:'010'}的格式
47                         //下面語句中用了es6的模板字符串,以前要用數組遍歷實現的,這里用模板字符串一行搞定
48                         this.fileData[i] =`${i==0?'[':''}{cityName:'${tds[0]}',code:'${tds[1]}',cityCode:'${tds[2]}'}${i==(this.fileData.length-1)?']':','}`
49                     }
50                 }
51             }
52         })
53     </script>
54     <style lang="css">
55         li {
56             list-style: none;
57         }
58     </style>
59 
60 </html>

如上,其實上邊代碼中有點技術含量的也就算是模板字符串了吧,以前都是用數組遍歷來實現的,這里一行搞定。如果看不懂,可以按下面方法進行解析:

1                         this.fileData[i] =
2                             `${i==0?'[':''}
3                                     {
4                                         cityName:'${tds[0]}',
5                                         code:'${tds[1]}',
6                                         cityCode:'${tds[2]}'
7                                     }
8                             ${i==(this.fileData.length-1)?']':','}`

如上,可以按照js對象的格式進行編寫也是可以的,不影響正常編譯(強大的模板字符串)

驗證轉換工具:

打開網頁,復制幾行數據粘貼到文本域中(一定要三列完整的復制),然后點擊轉換按鈕:

非常完美的完成了excel到json數據的轉換,然后就可以對整個電子表格文檔進行轉換了!

后續優化——解決轉換數據過大的問題:

雖然上邊成功將電子表格中的數據轉換未json格式數據,但是轉換之后的數據文件比較大:

這就不太好了,我們需要的只是根據小程序API返回的行政編碼查詢區號,那么我們就可以對轉換數據進行優化,只保留行政編碼和區號。

關鍵代碼如下:

this.fileData[i] =`${i==0?'{':''}'${tds[0]}':'${tds[1]}'${i==(this.fileData.length-1)?'}':','}`

如上,將行政編碼作為key(唯一性),區號作為value,這樣可以直接將整個數據轉換成一個對象類型的json數據(數組類型的還得遍歷,調用有點麻煩了)。

小程序調用示例:

    getCityCodeByCityAdcode(cityAdcode) {
        let cityCode = require('../../utils/cityCode')
        return cityCode[cityAdcode] || ''
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM