日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信公众平台消息接口开发(11)地理位置查询附近商家

發布時間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信公众平台消息接口开发(11)地理位置查询附近商家 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

一、獲取用戶地址位置消息

用戶發送位置時的消息及格式如下

后臺格式:

<xml> <ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName> <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FLACFromUserName> <CreateTime>1359036619</CreateTime> <MsgType><![CDATA[location]]></MsgType> <Location_X>22.539968</Location_X> <Location_Y>113.954980</Location_Y> <Scale>16</Scale> <Label><![CDATA[中國廣東省深圳市南山區華僑城深南大道9789號 郵政編碼: 518057]]></Label> <MsgId>5837017832671832047</MsgId> </xml>

?XML格式講解

ToUserName 消息接收方微信號,一般為公眾平臺賬號微信號FromUserName 消息發送方微信號CreateTime 消息創建時間MsgType 消息類型,地理位置為locationLocation_X 地理位置緯度Location_Y 地理位置經度Scale 地圖縮放大小Label 地理位置信息MsgId 消息ID號

?

二、獲取周邊區域信息

百度地圖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

范圍記錄數量,默認為10條記錄,最大返回20條。多關鍵字檢索時,返回的記錄數為關鍵字個數*page_size。

page_num

0

0、1、2

分頁頁碼,默認為0,0代表第一頁,1代表第二頁,以此類推。

ak

E4805d16520de693a3fe707cdc962045

用戶的訪問密鑰,必填項。v2之前該屬性為key。

sn

 

用戶的權限簽名。

timestamp

 

設置sn后該值必填。

調用舉例如下:

http://api.map.baidu.com/place/v2/search?ak=MgBALVVeCd8THVBi6gPdvsvG&output=json&query=%E9%93%B6%E8%A1%8C&page_size=5&page_num=0&scope=2&location=39.915,116.404&radius=2000&filter=sort_name:distance

?

三、程序實現

百度地圖類定義如下

class baiduMapClient { private $api_server_url;private $auth_params;public function __construct(){$this->api_server_url = "http://api.map.baidu.com/";$this->auth_params = array();$this->auth_params['key'] = "401f9a693dd267dd9a4661ec0895fb20";$this->auth_params['output'] = "json";}public function Geocoding_coordinate_address($location) { return $this->call("geocoder", array("location" => $location));}//http://api.map.baidu.com/place/search?&query=眼鏡&location=39.915,116.404&radius=3000&output=json&key=37492c0ee6f924cb5e934fa08c6b1676public function Place_search($query, $location, $radius) {return $this->call("place/search", array("query" => $query, "location" => $location, "radius" => $radius));}protected function call($method, $params = array()){$headers = array("User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1","Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language: en-us,en;q=0.5",//"Accept-Encoding: gzip, deflate","Referer: http://developer.baidu.com/");$params = array_merge($this->auth_params, $params);$url = $this->api_server_url . "$method?".http_build_query($params);if (DEBUG_MODE){echo "REQUEST: $url" . "\n";}$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $data = curl_exec($ch);curl_close($ch); $result = null;if (!empty($data)){if (DEBUG_MODE){echo "RETURN: " . $data . "\n";}$result = json_decode($data);}else{echo "cURL Error:". curl_error($ch);}return $result;} }

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

function catchEntitiesFromLocation($entity, $x, $y, $radius) { $mapObj = new baiduMapClient();$search = $mapObj->Place_search($entity, $x.",".$y, $radius);$results = $search->results;for ($i = 0; $i < count($results); $i++) {$distance = getDistance($x, $y, $results[$i]->location->lat, $results[$i]->location->lng);$shopSortArrays[$distance] = array("Title"=>"【".$results[$i]->name."】<".$distance."M>".$results[$i]->address.(isset($results[$i]->telephone)?" ".$results[$i]->telephone:""),"Description"=>"", "PicUrl"=>"", "Url"=>"");}ksort($shopSortArrays);//排序$shopArray = array(); foreach ($shopSortArrays as $key => $value) { $shopArray[] = array("title" => $value["Title"],"description" => $value["Description"],"pic" => $value["PicUrl"],"url" => $value["Url"],);if (count($shopArray) > 6){break;}}return $shopArray; }

計算兩坐標之間距離如下

function getDistance($lat_a, $lng_a, $lat_b, $lng_b) {//R是地球半徑(米)$R = 6366000;$pk = doubleval(180 / 3.14169);$a1 = doubleval($lat_a / $pk);$a2 = doubleval($lng_a / $pk);$b1 = doubleval($lat_b / $pk);$b2 = doubleval($lng_b / $pk);$t1 = doubleval(cos($a1) * cos($a2) * cos($b1) * cos($b2));$t2 = doubleval(cos($a1) * sin($a2) * cos($b1) * sin($b2));$t3 = doubleval(sin($a1) * sin($b1));$tt = doubleval(acos($t1 + $t2 + $t3));return round($R * $tt); }

對于用戶的坐標記錄,我們使用數據庫的方式來存儲,

?

如果用戶發送查詢命令,則直接查詢,

function searchUserLocation($userWxid) {Global $mysql_host;Global $mysql_host_s;Global $mysql_port;Global $mysql_user;Global $mysql_password;Global $mysql_database;//查詢使用從庫,支持SAE$mysql_table = "location";$mysql_state = "SELECT * FROM ".$mysql_table." WHERE userWxid = \"".$userWxid."\"";$con = mysql_connect($mysql_host.':'.$mysql_port, $mysql_user, $mysql_password);if (!$con){die('Could not connect: ' . mysql_error());}mysql_query("SET NAMES 'UTF8'");mysql_select_db($mysql_database, $con);$result = mysql_query($mysql_state);$location = array(); while($row = mysql_fetch_array($result)){$location["x"] = $row["locationX"]; $location["y"] = $row["locationY"]; }mysql_close($con);if (isset($location["x"]) && $location["x"] != 0.0){return $location;}else{return "系統中沒有你的地理位置信息,請先發送位置給我!您不用擔心你的行蹤被泄漏,因為你可以滑動地圖,把別處的地址發送過來。";}}

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

function updateOrInsert($weixinid, $locationX, $locationY) { if (isset($_SERVER['HTTP_APPNAME'])){$mysql_host = SAE_MYSQL_HOST_M;$mysql_host_s = SAE_MYSQL_HOST_S; //sae的從庫$mysql_port = SAE_MYSQL_PORT;$mysql_user = SAE_MYSQL_USER;$mysql_password = SAE_MYSQL_PASS;$mysql_database = SAE_MYSQL_DB;}else{$mysql_host = "127.0.0.1";$mysql_host_s = "127.0.0.1";$mysql_port = "3306";$mysql_user = "root";$mysql_password = "root";$mysql_database = "sae";}$mysql_table = "location";//INSERT INTO location VALUES("23s2s", 1122.2, 366.2) ON DUPLICATE KEY UPDATE locationX = 1122.2, locationY = 366.2;$mysql_state = "INSERT INTO ".$mysql_table." VALUES(\"".$weixinid."\", ".$locationX.", ".$locationY.") ON DUPLICATE KEY UPDATE locationX = ".$locationX.", locationY = ".$locationY.";";var_dump($mysql_state);// $con = mysql_connect($mysql_host.':'.$mysql_port, $mysql_user, $mysql_password);if (!$con){die('Could not connect: ' . mysql_error());}mysql_query("SET NAMES 'UTF8'");mysql_select_db($mysql_database, $con);$result = mysql_query($mysql_state);if ($result == true){//return "你提交的位置為緯度:".$locationX.",經度:".$locationY."。\n現在可以發送“附近”加關鍵字的命令查詢附近的目標,如“附近酒店”,“附近醫院”。";return "已經成功獲取你的位置。您不用擔心你的行蹤被泄漏,因為你可以把千里之外的地址提交過來。\n現在可以發送“附近”加關鍵字的命令查詢附近的目標,如“附近酒店”,“附近醫院”。";}else{return "提交失敗,請重試。如果一直出現這樣的錯誤,請給我們留言。";} }

對于用戶發送的內容,先提取坐標,然后進行組合查詢

實現效果如下:

?

?

原文:http://www.cnblogs.com/txw1958/archive/2013/02/04/weixin-if11-location.html

---------------------------------------------------------------------------------------------------------------------------

?

轉載于:https://www.cnblogs.com/txw1958/archive/2013/02/04/weixin-if11-location.html

總結

以上是生活随笔為你收集整理的微信公众平台消息接口开发(11)地理位置查询附近商家的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美色图网站 | 日本青草视频 | 视频一区 国产 | 午夜精品一区二区三区在线 | 毛片基地在线观看 | av网址导航| 日韩av高清在线播放 | 国产91精品久久久久久久 | a网站在线观看 | 婷婷射| 爽天天天天天天天 | 中文国语毛片高清视频 | 欧美性受xxxx黑人xyx | 999超碰| 国内外成人激情视频 | 九久久 | 日本不卡一区二区在线观看 | 最好看的2019年中文在线观看 | 欧美大黄 | 国产精欧美一区二区三区蓝颜男同 | 草草地址线路①屁屁影院成人 | 日韩精品久久久久久久 | 日韩黄色大片 | 经典杯子蛋糕日剧在线观看免费 | 成人精品免费网站 | 国产色婷婷 | 午夜亚洲国产 | www.中文字幕在线观看 | 成人久久网 | 日本免费在线视频 | 精品人妻一区二 | 蜜桃av免费看 | 欧洲精品一区二区三区久久 | 欧美手机在线观看 | 户外露出一区二区三区 | 国产高清自拍一区 | 日本欧美色 | 国产欧美精品一区二区三区 | 亚洲综合在线一区二区 | 色av一区二区三区 | av嫩草| 五月色丁香 | 欧美福利在线观看 | 永久av在线| 鲁鲁在线 | 69热在线 | 欧美一区免费 | 国产精品亚洲二区在线观看 | 久久精品免费看 | 亚洲熟妇无码乱子av电影 | 香蕉视频啪啪 | 一区二区免费 | 3344av| 五月天色视频 | 亚洲色图 在线视频 | 高清成人 | 少妇又色又爽又高潮极品 | 色呦网站 | 成年人网站在线观看视频 | 一区二区在线观看av | 精品在线播放视频 | 国产精品久久久毛片 | 亚洲综合黄色 | 亚洲成人二区 | 五月天黄色小说 | 丰满大乳少妇在线观看网站 | 亚洲九九爱| www.com久久 | 人人澡澡人人 | 激情婷婷综合网 | 国产成人在线视频免费观看 | www.国产免费 | 日本aa大片 | 成人毛片在线视频 | 爱插网 | 天天看片天天干 | 最新中文av| 竹菊影视一区二区三区 | 少妇影院在线观看 | 国产一区免费在线 | 无套内谢大学处破女www小说 | 99这里都是精品 | 国产欧美专区 | 亚欧洲精品视频 | 少妇一晚三次一区二区三区 | 亚洲天堂男人网 | 久久国产精品久久国产精品 | 九色av | 亚洲国产成人精品一区二区三区 | 高跟丝袜av | 日韩视频一二三区 | 国产中文在线播放 | 国产69精品一区二区 | 毛片内射 | 日本三级久久久 | 婷婷色六月 | 日韩一级片在线播放 | 日韩激情床戏 | 国产激情av一区二区三区 |