真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

微信開(kāi)發(fā)中如何獲取用戶地址位置消息

這篇文章主要為大家展示了“微信開(kāi)發(fā)中如何獲取用戶地址位置消息”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“微信開(kāi)發(fā)中如何獲取用戶地址位置消息”這篇文章吧。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、城陽(yáng)網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、城陽(yáng)網(wǎng)絡(luò)營(yíng)銷、城陽(yáng)企業(yè)策劃、城陽(yáng)品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供城陽(yáng)建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

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

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

微信開(kāi)發(fā)中如何獲取用戶地址位置消息

后臺(tái)格式:




1359036619

22.539968
113.954980
16

5837017832671832047

XML格式講解

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

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

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

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

參數(shù)

是否必須

默認(rèn)值

格式舉例

含義

location

無(wú)

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

周邊檢索中心點(diǎn),不支持多個(gè)點(diǎn)

radius(r)

無(wú)

2000

周邊檢索半徑,單位為米

q(query)

無(wú)

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

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

tag

無(wú)

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

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

output

xml

json或xml

輸出格式為json或者xml

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

檢索過(guò)濾條件,當(dāng)scope取值為2時(shí),可以設(shè)置filter進(jìn)行排序。
 industry_type:行業(yè)類型
 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è),以此類推。

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)

百度地圖類定義如下

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=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.':'.$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 "系統(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['HTTP_APPNAME'])){
        $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.':'.$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.",經(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)行組合查詢

微信開(kāi)發(fā)中如何獲取用戶地址位置消息

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

微信開(kāi)發(fā)中如何獲取用戶地址位置消息微信開(kāi)發(fā)中如何獲取用戶地址位置消息微信開(kāi)發(fā)中如何獲取用戶地址位置消息

以上是“微信開(kāi)發(fā)中如何獲取用戶地址位置消息”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


本文標(biāo)題:微信開(kāi)發(fā)中如何獲取用戶地址位置消息
URL分享:http://weahome.cn/article/pscjed.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部