Loc/get location
Zhangchao2 (讨论 | 贡献) (→PHP示例) |
Zhangchao2 (讨论 | 贡献) (→PHP示例) |
||
第226行: | 第226行: | ||
//Loc/get location | //Loc/get location | ||
//获取定位数据 | //获取定位数据 | ||
− | $ | + | //改为你的微博账号,用户名和密码之间用:隔开 |
+ | $userPwd = 'user@sina.com:pwd'; | ||
+ | //改为你微博应用的appkey | ||
+ | $appkey = '0123456789'; | ||
+ | $url = "http://api.t.sina.com.cn/location/loc/get_location.json?source=$appkey"; | ||
+ | |||
$data = array( | $data = array( | ||
"version"=> "1.1.0", | "version"=> "1.1.0", | ||
第269行: | 第274行: | ||
); | ); | ||
$data = json_encode($data); | $data = json_encode($data); | ||
− | function curlPost($url,$data,$ | + | |
− | + | function curlPost($url,$userPwd,$data = '',$header = ''){ | |
− | curl_setopt($ch, CURLOPT_URL, $url); | + | $ch = curl_init() or die (curl_error()) ; |
− | curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | + | curl_setopt($ch,CURLOPT_URL,$url); |
− | curl_setopt($ch, | + | curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); |
− | curl_setopt($ch, | + | curl_setopt($ch,CURLOPT_TIMEOUT,30); |
− | curl_setopt($ch, | + | if(!empty($userPwd)){ |
− | curl_setopt($ch, | + | curl_setopt($ch,CURLOPT_USERPWD,$userPwd); |
− | $result = curl_exec($ch); | + | } |
+ | if(!empty($data)){ | ||
+ | curl_setopt($ch,CURLOPT_POST,true); | ||
+ | curl_setopt($ch,CURLOPT_POSTFIELDS,$data); | ||
+ | } | ||
+ | if(!empty($header)){ | ||
+ | curl_setopt($ch, CURLOPT_HTTPHEADER,$header); | ||
+ | } | ||
+ | $result = curl_exec($ch) or die (curl_error($ch)); | ||
+ | curl_close($ch); | ||
return $result; | return $result; | ||
} | } | ||
− | $return = curlPost($url,$data); | + | $header = array('Content-type: application/json'); |
+ | |||
+ | $return = curlPost($url,$userPwd,$data,$header); | ||
</pre> | </pre> |
2012年2月21日 (二) 18:15的最后版本
目录 |
API简介
定位服务根据客户端提供的一系列定位依据数据,通过计算获取一个固定的位置。定位依据主要包括客户端可以检测到的基站或者WIFI相关数据。本文档的主要目的,就是描述如何使用该接口发送定位依据数据至服务器,然后如何解析从服务器返回的位置数据。需要注意的是,客户端与服务器的通讯采用HTTP的方式请求,数据用POST方式向服务器请求,接口接收和返回的数据都是JSON格式,这里要注意的一点是,请求的Content-Type请使用application/json。
定位覆盖范围
目前定位服务只主要支持中国大陆地区。
服务请求地址
http://api.t.sina.com.cn/location/loc/get_location.(json|xml)
使用实例
客户端请求以及服务器返回举例说明如下
请求定位数据格式
{ "version": "1.1.0", "host": "api.t.sina.com.cn/location/loc/", "radio_type": "gsm", "request_address": true, "decode_pos":true, "location": { "latitude": 39.08943, "longitude": 116.36843 "accuracy" :678.0 }, "cell_towers": [ { "cell_id": 4466, "location_area_code": 26630, "mobile_country_code": 460, "mobile_network_code": 0, "signal_strength": -60, }, { "cell_id": 4466, "location_area_code": 25054, "mobile_country_code": 460, "mobile_network_code": 0, "signal_strength": -70, } ], "wifi_towers": [ { "mac_address": "00:0B:86:27:99:B0", “mac_name”:"Sina-web", "signal_strength": 78, }, { "mac_address": "00:0B:86:28:7B:F0", “mac_name”:"CMCC", "signal_strength": 90, } ] }
服务器返回数据格式(JSON格式)
{ "location": { "longitude": 116.30951, "latitude": 39.98384, "accuracy": 49, "altitude": 0, "altitude_accuracy": 0, "address": { "province ": "北京市", "city": "北京市", "citycode": "0010" "district": "海淀区", "addr": "海淀北二街10", } }, }
服务器返回数据格式(XML格式)
<?xml version="1.0" encoding="UTF-8"?> <geoSearchResult><location> <longitude>116.30951</longitude> <latitude>39.98384</latitude> <accuracy>49</accuracy> <altitude></altitude> <altitude_accuracy></altitude_accuracy> <address> <province>北京市</province> <city>北京市</city> <citycode>0010</citycode> <district>海淀区</district> <addr>海淀北二街10</addr> </address> </location></geoSearchResult>
请求数据格式说明
对请求数据的详细说明如下:
名称 | 描述 | 是否必须 | 数据类型 |
---|---|---|---|
version | 新浪定位版本标识,目前我们只提供 "1.1.0"版,以前的版本停止定位服务 | 否 | string |
host | 定位的服务器地址 | 否 | string |
source | 申请应用时分配的AppKey,调用接口时候代表应用的唯一身份 | 是 | string |
radio_type | 移动通讯类型说明 (gsm,cdma,wcdma) | 否 | string |
request_address | 是否请求对应坐标的位置描述 | 否 | boolean |
decode_pos | 标识返回的位置是否需要经过偏移加密 | 否 | boolean |
location | 位置对象,详见下说明 | 否 | object |
cell_towers | 基站数据描述对象,详见下说明 | 否 | array |
wifi_towers | WIFI数据描述对象,详见下说明 | 否 | array |
位置对象
名称 | 描述 | 是否必须 | 数据类型 |
---|---|---|---|
latitude | 当前定位的纬度数据(WGS84 datum) | 否 | double |
longitude | 当前定位的经度数据(WGS84 datum) | 否 | double |
基站数据对象
名称 | 描述 | 是否必须 | 数据类型 |
---|---|---|---|
cell_id | 基站标识的唯一标识,GSM网络的CID,CDMA网络的BID | 否 | int |
location_area_code | 小区号标识数据,GSM网络的LAC,CDMA网络的NID | 否 | int |
mobile_country_code | 移动国家编码,GSM网络和CDMA都是MCC | 否 | int |
mobile_network_code | 网络标识,GSM网络的MNC,CDMA网络的SID | 否 | int |
signal_strength | 当前基站广播的信号强度,单位是DBM | 否 | int |
WIFI数据对象,WIFI对于定位这个过程不是必须的,但是对于采用WIFI定位来说,mac_address这个参数是必须的。
名称 | 描述 | 是否必须 | 数据类型 |
---|---|---|---|
mac_address | WIFI结点(路由器)的MAC地址 | 否 | String |
mac_name | WIFI结点(路由器)的名称 | 否 | String |
signal_strength | 当前WIFI广播的信号强度,单位是DBM | 否 | int |
服务器返回数据说明
服务器定位成功后,会将定位结果返回客户端,如果定位没有成功,返回结果为空。
名称 | 描述 | 是否必须 | 数据类型 |
---|---|---|---|
latitude | 定位结果的纬度数据 | 是 | double |
longtitude | 定位结果的经度数据 | 是 | double |
altitude | 定位结果的海拔高度测量数据 | 否 | double |
accuracy | 定位的水平误差,接口定位的结果是以90%的置信度进行计算,一般情况下该值是必须的 | 否 | double |
altitude_accuracy | 定位的垂直误差,接口定位的结果是以90%的置信度进行计算 | 否 | double |
address | 如果请求的时候,选择返回位置,则会有该项。但如果经过计算,无法查找该值,则返回为空 | 否 | object |
地址对象格式定义的具体说明
名称 | 描述 | 是否必须 | 数据类型 |
---|---|---|---|
addr | 地址的具体地址,如海淀北二街89号 | 否 | string |
district | 定位结果所在区号 | 是 | string |
city | 定位结果所在城市 | 否 | string |
province | 定位结果所在省 | 否 | string |
citycode | 定位结果所在城市的编码,如北京‘0010’ | 否 | string |
其它
PHP示例
代码示例如下:
//Loc/get location //获取定位数据 //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd'; //改为你微博应用的appkey $appkey = '0123456789'; $url = "http://api.t.sina.com.cn/location/loc/get_location.json?source=$appkey"; $data = array( "version"=> "1.1.0", "host"=> "api.t.sina.com.cn/location/loc/", "radio_type"=> "gsm", "request_address"=> true, "decode_pos"=>true, "location"=>array( "latitude"=>39.08943, "longitude"=>116.36843, "accuracy" =>678.0 ), "cell_towers"=>array( array ( "cell_id"=> 4466, "location_area_code"=> 26630, "mobile_country_code"=> 460, "mobile_network_code"=> 0, "signal_strength"=> -60, ), array ( "cell_id"=> 4466, "location_area_code"=> 25054, "mobile_country_code"=> 460, "mobile_network_code"=> 0, "signal_strength"=> -70, ) ), "wifi_towers"=>array( array( "mac_address"=> "00:0B:86:27:99:B0", "mac_name"=>"Sina-web", "signal_strength"=> 78, ), array( "mac_address"=> "00:0B:86:28:7B:F0", "mac_name"=>"CMCC", "signal_strength"=> 90, ) ) ); $data = json_encode($data); function curlPost($url,$userPwd,$data = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){ curl_setopt($ch,CURLOPT_USERPWD,$userPwd); } if(!empty($data)){ curl_setopt($ch,CURLOPT_POST,true); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); } if(!empty($header)){ curl_setopt($ch, CURLOPT_HTTPHEADER,$header); } $result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } $header = array('Content-type: application/json'); $return = curlPost($url,$userPwd,$data,$header);
文档更新时间: 2012-02-21