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

目錄
三、程序實現(xiàn)
首頁 微信小程式 微信開發(fā) 微信公眾平臺訊息介面開發(fā)地理位置查詢附近商家實例

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

Mar 31, 2017 pm 02:50 PM
微信大眾平臺

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

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

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

## 背景格式:

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

?XML格式講解


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

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

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

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

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

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

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

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

是否必須

預設值

格式範例

意思


#無

38.76623, 116.43213?

#週邊擷取中心點,不支援多個點

##2000

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

#q(query)

##是

tag

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

標籤項,與q組合檢索

##output

#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:產(chǎn)業(yè)類型### ?sort_name:排序欄位### ?sort_rule:排序規(guī)則,取值如下:0:從高到低,1:從低到高;### ?price_section:價格區(qū)間;### ?groupon:是否有團購,1為有團購,0為無團購;### ?discount:是否打折,1為有打折,0為無打折;###

page_size

10

10

范圍記錄數(shù)量,默認為10條記錄,最大返回20條。多關鍵字檢索時,返回的記錄數(shù)為關鍵字個數(shù)*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

三、程序實現(xiàn)

百度地圖類定義如下

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

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

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

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

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

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.&#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)中沒有你的地理位置信息,請先發(fā)送位置給我!您不用擔心你的行蹤被泄漏,因為你可以滑動地圖,把別處的地址發(fā)送過來。";
    }
    
}

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

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的從庫
        $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ā)送“附近”加關鍵字的命令查詢附近的目標,如“附近酒店”,“附近醫(yī)院”。";
        return "已經(jīng)成功獲取你的位置。您不用擔心你的行蹤被泄漏,因為你可以把千里之外的地址提交過來。\n現(xiàn)在可以發(fā)送“附近”加關鍵字的命令查詢附近的目標,如“附近酒店”,“附近醫(yī)院”。";
    }else{
        return "提交失敗,請重試。如果一直出現(xiàn)這樣的錯誤,請給我們留言。";
    }
}

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

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

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

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

?

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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