国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
三、程序?qū)崿F(xiàn)
首頁(yè) 微信小程式 微信開(kāi)發(fā) 微信公眾平臺(tái)訊息介面開(kāi)發(fā)地理位置查詢附近商家實(shí)例

微信公眾平臺(tái)訊息介面開(kāi)發(fā)地理位置查詢附近商家實(shí)例

Mar 31, 2017 pm 02:50 PM
微信大眾平臺(tái)

?一、取得使用者位址位置訊息

使用者傳送位置時(shí)的訊息及格式如下

微信公眾平臺(tái)訊息介面開(kāi)發(fā)地理位置查詢附近商家實(shí)例

## 背景格式:

<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[中國(guó)廣東省深圳市南山區(qū)華僑城深南大道9789號(hào) 郵政編碼: 518057]]></Label>
<MsgId>5837017832671832047</MsgId>
</xml>

?XML格式講解


ToUserName 消息接收方微信號(hào),一般為公眾平臺(tái)賬號(hào)微信號(hào)
 FromUserName 消息發(fā)送方微信號(hào)
 CreateTime 消息創(chuàng)建時(shí)間
 MsgType 消息類(lèi)型,地理位置為location
 Location_X 地理位置緯度
 Location_Y 地理位置經(jīng)度
 Scale 地圖縮放大小
 Label 地理位置信息
 MsgId 消息ID號(hào)

二、取得週邊區(qū)域資訊

百度地圖Place API 是一類(lèi)簡(jiǎn)單的HTTP接口,用於傳回查詢某個(gè)區(qū)域的某類(lèi)POI數(shù)據(jù),且提供單一POI的詳情查詢服務(wù),使用者可以使用C#、C++、Java等開(kāi)發(fā)語(yǔ)言發(fā)送HTTP請(qǐng)求且接收json、xml的資料。

Place API 提供區(qū)域檢索POI服務(wù)、POI詳情服務(wù)與團(tuán)購(gòu)資訊檢索服務(wù)、商家團(tuán)購(gòu)詳情查詢。區(qū)域檢索POI服務(wù)提供三種區(qū)域檢索方法:城市內(nèi)檢索、矩形檢索、圓形區(qū)域檢索。

我們使用圓形區(qū)域檢索來(lái)實(shí)現(xiàn)附近搜尋功能。

place區(qū)域檢索POI服務(wù)介面如下:

http://api.map.baidu.com/place/v2/search

#location是# lat<緯度>,lng<經(jīng)度>radius(r)否#無(wú)無(wú)中關(guān)村、ATM、百度大廈檢索關(guān)鍵字,週邊擷取與矩形區(qū)域內(nèi)檢索支援多個(gè)關(guān)鍵字並集檢索,不同關(guān)鍵字間以$符號(hào)分隔,最多支援10個(gè)關(guān)鍵字檢索。如:”銀行$酒店”。 #無(wú)#xmljson或xml輸出格式為json或xml
##參數(shù)

是否必須

預(yù)設(shè)值

格式範(fàn)例

意思


#無(wú)

38.76623, 116.43213?

#週邊擷取中心點(diǎn),不支援多個(gè)點(diǎn)

##2000

##週邊檢索半徑,單位為米

#q(query)

##是

tag

日式烤肉/鐵板燒、朝外大街

標(biāo)籤項(xiàng),與q組合檢索

##output

#scope




1




1、2


#檢索結(jié)果詳細(xì)程度。取值為1 或空,則傳回基本資訊;取值為2,傳回檢索POI詳細(xì)資料##################filter######### ###否############無(wú)############filter=industry_type:cater### ?|sort_name:price### ?|sort_rule:0### ?|price_section:100,200### ?|groupon:0### ?|discount:0############檢索篩選條件,當(dāng)scope取值為2時(shí),可以設(shè)定filter進(jìn)行排序。 ### ?industry_type:產(chǎn)業(yè)類(lèi)型### ?sort_name:排序欄位### ?sort_rule:排序規(guī)則,取值如下:0:從高到低,1:從低到高;### ?price_section:價(jià)格區(qū)間;### ?groupon:是否有團(tuán)購(gòu),1為有團(tuán)購(gòu),0為無(wú)團(tuán)購(gòu);### ?discount:是否打折,1為有打折,0為無(wú)打折;###

page_size

10

10

范圍記錄數(shù)量,默認(rèn)為10條記錄,最大返回20條。多關(guān)鍵字檢索時(shí),返回的記錄數(shù)為關(guān)鍵字個(gè)數(shù)*page_size。

page_num

0

0、1、2

分頁(yè)頁(yè)碼,默認(rèn)為0,0代表第一頁(yè),1代表第二頁(yè),以此類(lèi)推。

ak

無(wú)

E4805d16520de693a3fe707cdc962045

用戶的訪問(wèn)密鑰,必填項(xiàng)。v2之前該屬性為key。

sn

無(wú)

 

用戶的權(quán)限簽名。

timestamp

無(wú)

 

設(shè)置sn后該值必填。

調(diào)用舉例如下:


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

三、程序?qū)崿F(xiàn)

百度地圖類(lèi)定義如下

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[&#39;key&#39;] = "401f9a693dd267dd9a4661ec0895fb20";
        $this->auth_params[&#39;output&#39;] = "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=37492c0ee6f924cb5e934fa08c6b1676
    public 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;
    }
}

獲取附近的調(diào)用代碼如下:

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;
}

計(jì)算兩坐標(biāo)之間距離如下

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);
}

對(duì)于用戶的坐標(biāo)記錄,我們使用數(shù)據(jù)庫(kù)的方式來(lái)存儲(chǔ),

如果用戶發(fā)送查詢命令,則直接查詢,

function searchUserLocation($userWxid)
{
    Global $mysql_host;
    Global $mysql_host_s;
    Global $mysql_port;
    Global $mysql_user;
    Global $mysql_password;
    Global $mysql_database;
    
    //查詢使用從庫(kù),支持SAE
    $mysql_table = "location";
    $mysql_state = "SELECT * FROM ".$mysql_table." WHERE userWxid = \"".$userWxid."\"";
    $con = mysql_connect($mysql_host.&#39;:&#39;.$mysql_port, $mysql_user, $mysql_password);
    if (!$con){
        die(&#39;Could not connect: &#39; . mysql_error());
    }
    mysql_query("SET NAMES &#39;UTF8&#39;");
    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 "系統(tǒng)中沒(méi)有你的地理位置信息,請(qǐng)先發(fā)送位置給我!您不用擔(dān)心你的行蹤被泄漏,因?yàn)槟憧梢曰瑒?dòng)地圖,把別處的地址發(fā)送過(guò)來(lái)。";
    }
    
}

如果用戶發(fā)了位置,則進(jìn)行更新

function updateOrInsert($weixinid, $locationX, $locationY)
{    
    if (isset($_SERVER[&#39;HTTP_APPNAME&#39;])){
        $mysql_host = SAE_MYSQL_HOST_M;
        $mysql_host_s = SAE_MYSQL_HOST_S;  //sae的從庫(kù)
        $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.&#39;:&#39;.$mysql_port, $mysql_user, $mysql_password);
    if (!$con){
        die(&#39;Could not connect: &#39; . mysql_error());
    }
    mysql_query("SET NAMES &#39;UTF8&#39;");
    mysql_select_db($mysql_database, $con);
    $result = mysql_query($mysql_state);
    if ($result == true){
        //return "你提交的位置為緯度:".$locationX.",經(jīng)度:".$locationY."。\n現(xiàn)在可以發(fā)送“附近”加關(guān)鍵字的命令查詢附近的目標(biāo),如“附近酒店”,“附近醫(yī)院”。";
        return "已經(jīng)成功獲取你的位置。您不用擔(dān)心你的行蹤被泄漏,因?yàn)槟憧梢园亚Ю镏獾牡刂诽峤贿^(guò)來(lái)。\n現(xiàn)在可以發(fā)送“附近”加關(guān)鍵字的命令查詢附近的目標(biāo),如“附近酒店”,“附近醫(yī)院”。";
    }else{
        return "提交失敗,請(qǐng)重試。如果一直出現(xiàn)這樣的錯(cuò)誤,請(qǐng)給我們留言。";
    }
}

對(duì)于用戶發(fā)送的內(nèi)容,先提取坐標(biāo),然后進(jìn)行組合查詢

微信公眾平臺(tái)訊息介面開(kāi)發(fā)地理位置查詢附近商家實(shí)例

實(shí)現(xiàn)效果如下:

?微信公眾平臺(tái)訊息介面開(kāi)發(fā)地理位置查詢附近商家實(shí)例微信公眾平臺(tái)訊息介面開(kāi)發(fā)地理位置查詢附近商家實(shí)例微信公眾平臺(tái)訊息介面開(kāi)發(fā)地理位置查詢附近商家實(shí)例

?

以上是微信公眾平臺(tái)訊息介面開(kāi)發(fā)地理位置查詢附近商家實(shí)例的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題