Loc/get location

跳转到: 导航, 搜索

目录

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