微信公衆平台開發 - 擷取使用者地理位置
本文介紹在微信公衆平台上如何使用進階接口開發擷取使用者地理位置的功能。
開通了上報地理位置接口的公衆号,使用者在關注後進入公衆号會話時,會彈框讓使用者确認是否允許公衆号使用其地理位置。彈框隻在關注後出現一次,使用者以後可以在公衆号詳情頁面進行操作。
使用者同意上報地理位置後,每次進入公衆号會話時,都會在進入時上報地理位置,上報地理位置以推送XML資料包到開發者填寫的URL來實作。
推送XML資料包示例:


參數說明:
參數
描述
ToUserName
開發者微信号
FromUserName
發送方帳号(一個OpenID)
CreateTime
消息建立時間 (整型)
MsgType
消息類型,event
Event
事件類型,LOCATION
Latitude
地理位置緯度
Longitude
地理位置經度
Precision
地理位置精度
地理位置是一個事件消息,在方倍工作室的微信公衆平台PHP SDK中,增加位置資訊判斷,然後擷取使用者的緯度和經度。


也可以把位置資訊存到資料庫,這樣友善以後分析。
微信公衆平台消息接口開發(11)地理位置查詢附近商家
一、擷取使用者位址位置消息
使用者發送位置時的消息及格式如下
背景格式:


XML格式講解


百度地圖Place API 是一類簡單的HTTP接口,用于傳回查詢某個區域的某類POI資料,且提供單個POI的詳情查詢服務,使用者可以使用C#、C++、Java等開發語言發送HTTP請求且接收json、xml的資料。
Place API 提供區域檢索POI服務、POI詳情服務與團購資訊檢索服務、商家團購詳情查詢。區域檢索POI服務提供三種區域檢索方法:城市内檢索、矩形檢索、圓形區域檢索。
我們使用圓形區域檢索來實作附近搜尋功能。
place區域檢索POI服務接口如下:
http://api.map.baidu.com/place/v2/search
是否必須
預設值
格式舉例
含義
location
是
無
38.76623,116.43213
lat<緯度>,lng<經度>
周邊檢索中心點,不支援多個點
radius(r)
否
2000
周邊檢索半徑,機關為米
q(query)
中關村、ATM、百度大廈
檢索關鍵字,周邊檢索和矩形區域内檢索支援多個關鍵字并集檢索,不同關鍵字間以$符号分隔,最多支援10個關鍵字檢索。如:”銀行$酒店”。
tag
日式燒烤/鐵闆燒、朝外大街
标簽項,與q組合進行檢索
output
xml
json或xml
輸出格式為json或者xml
scope
1
1、2
檢索結果詳細程度。取值為1 或空,則傳回基本資訊;取值為2,傳回檢索POI詳細資訊
filter
filter=industry_type:cater
|sort_name:price
|sort_rule:0
|price_section:100,200
|groupon:0
|discount:0
檢索過濾條件,當scope取值為2時,可以設定filter進行排序。
industry_type:行業類型
sort_name:排序字段
sort_rule:排序規則,取值如下:0:從高到低,1:從低到高;
price_section:價格區間;
groupon:是否有團購,1為有團購,0為無團購;
discount:是否打折,1為有打折,0為無打折;
page_size
10
範圍記錄數量,預設為10條記錄,最大傳回20條。多關鍵字檢索時,傳回的記錄數為關鍵字個數*page_size。
page_num
0、1、2
分頁頁碼,預設為0,0代表第一頁,1代表第二頁,以此類推。
ak
E4805d16520de693a3fe707cdc962045
使用者的通路密鑰,必填項。v2之前該屬性為key。
sn
使用者的權限簽名。
timestamp
設定sn後該值必填。
調用舉例如下:
百度地圖類定義如下


擷取附近的調用代碼如下:


計算兩坐标之間距離如下


對于使用者的坐标記錄,我們使用資料庫的方式來存儲,
如果使用者發送查詢指令,則直接查詢,


如果使用者發了位置,則進行更新


對于使用者發送的内容,先提取坐标,然後進行組合查詢
實作效果如下:
1.由地名(省份、城市、街道等)得到其對應的百度地圖坐标:
http://api.map.baidu.com/geocoder/v2/?output=json&ak=你從百度申請到的Key&address=北京市
其對大陸主要城市的解析很好,但是有些大陸的小城市、香港、台灣的一些區域無法解析,我測試到的如下:
解析錯誤的城市:伊犁|新界|新竹|港島|基隆|雲林|博爾塔拉|桃園|苗栗|南投|克孜勒蘇|台東|
伊犁可以使用新疆伊犁來解析,更好的辦法是使用谷歌地圖API,比如這樣使用:
http://maps.google.com/maps/api/geocode/json?sensor=false&address=位址
在谷歌地圖中,港島可以使用:
來解析,
雲林可以使用:
Yunlin County, Taiwan
博爾塔拉可以使用博爾塔拉蒙古自治州來解析,
2.由坐标反解得到對應的位址:
http://api.map.baidu.com/geocoder/v2/?output=json&ak=你從百度申請到的Key&location=緯度(Latitude),經度(Longitude)
注意,緯度和經度之間有個英文逗号。
如何聯系我:【萬裡虎】www.bravetiger.cn
【QQ】3396726884 (咨詢問題100元起,幫助解決問題500元起)
【部落格】http://www.cnblogs.com/kenshinobiy/