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

目錄
二、獲取周邊區(qū)域信息
三、程序?qū)崿F(xiàn)
首頁 微信小程序 微信開發(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 地理位置經(jīng)度
 Scale 地圖縮放大小
 Label 地理位置信息
 MsgId 消息ID號

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

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

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

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

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

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

參數(shù)

是否必須

默認(rèn)值

格式舉例

含義

location

38.76623,116.43213
lat<緯度>,lng<經(jīng)度>

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

radius(r)

2000

周邊檢索半徑,單位為米

q(query)

中關(guān)村、ATM、百度大廈

檢索關(guān)鍵字,周邊檢索和矩形區(qū)域內(nèi)檢索支持多個關(guān)鍵字并集檢索,不同關(guān)鍵字間以$符號分隔,最多支持10個關(guān)鍵字檢索。如:”銀行$酒店”。

tag

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

標(biāo)簽項,與q組合進(jìn)行檢索

output

xml

json或xml

輸出格式為json或者xml

scope

1

1、2

檢索結(jié)果詳細(xì)程度。取值為1 或空,則返回基本信息;取值為2,返回檢索POI詳細(xì)信息

filter

filter=industry_type:cater
|sort_name:price
|sort_rule:0
|price_section:100,200
|groupon:0
|discount:0

檢索過濾條件,當(dāng)scope取值為2時,可以設(shè)置filter進(jìn)行排序。
industry_type:行業(yè)類型
sort_name:排序字段
sort_rule:排序規(guī)則,取值如下:0:從高到低,1:從低到高;
price_section:價格區(qū)間;
groupon:是否有團(tuán)購,1為有團(tuán)購,0為無團(tuán)購;
discount:是否打折,1為有打折,0為無打折;

page_size

10

10

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

page_num

0

0、1、2

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

ak

E4805d16520de693a3fe707cdc962045

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

sn

 

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

timestamp

 

設(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)

百度地圖類定義如下

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

計算兩坐標(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);
}

對于用戶的坐標(biāo)記錄,我們使用數(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ā)送位置給我!您不用擔(dān)心你的行蹤被泄漏,因為你可以滑動地圖,把別處的地址發(fā)送過來。";
    }
    
}

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

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

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

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

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

?

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

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)