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

目錄
二、獲取周邊區(qū)域信息
三、程序實現
首頁 微信小程序 微信開發(fā) 微信公眾平臺消息接口開發(fā)地理位置查詢附近商家實例

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

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

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

用戶發(fā)送位置時的消息及格式如下

微信公眾平臺消息接口開發(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 地理位置經度
 Scale 地圖縮放大小
 Label 地理位置信息
 MsgId 消息ID號

二、獲取周邊區(qū)域信息

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

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

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

place區(qū)域檢索POI服務接口如下:

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

參數

是否必須

默認值

格式舉例

含義

location

38.76623,116.43213
lat<緯度>,lng<經度>

周邊檢索中心點,不支持多個點

radius(r)

2000

周邊檢索半徑,單位為米

q(query)

中關村、ATM、百度大廈

檢索關鍵字,周邊檢索和矩形區(qū)域內檢索支持多個關鍵字并集檢索,不同關鍵字間以$符號分隔,最多支持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:行業(yè)類型
sort_name:排序字段
sort_rule:排序規(guī)則,取值如下:0:從高到低,1:從低到高;
price_section:價格區(qū)間;
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[&#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);
}

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

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

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

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

實現效果如下:

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

?

以上是微信公眾平臺消息接口開發(fā)地理位置查詢附近商家實例的詳細內容。更多信息請關注PHP中文網其他相關文章!

本站聲明
本文內容由網友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現有涉嫌抄襲侵權的內容,請聯系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

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

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)