您的位置:首页 > 移动开发 > Android开发

android 基于GeolocationAPI的基站定位

2011-08-25 08:46 204 查看
api 地址为http://code.google.com/p/gears/wiki/GeolocationAPI

发送的格式:

{

"location": {

"latitude": 51.0,

"longitude": -0.1,

"altitude": 30.1,

"accuracy": 1200.1,

"altitude_accuracy": 10.1,

"address": {

"street_number": "100",

"street": "Amphibian Walkway",

"postal_code": "94043",

"city": "Mountain View",

"county": "Mountain View County",

"region": "California",

"country": "United States of America",

"country_code": "US"

}

}

}

返回的格式: {

"location": {

"latitude": 51.0,

"longitude": -0.1,

"altitude": 30.1,

"accuracy": 1200.1,

"altitude_accuracy": 10.1,

"address": {

"street_number": "100",

"street": "Amphibian Walkway",

"postal_code": "94043",

"city": "Mountain View",

"county": "Mountain View County",

"region": "California",

"country": "United States of America",

"country_code": "US"

}

}

}

得到LAC 和CellId后,其它的就是json解析了;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Date;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class LocationStation extends Activity {
TextView mTextView;
Button mButton;
TelephonyManager tm;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mTextView = (TextView) findViewById(R.id.textView);
mButton = (Button) findViewById(R.id.Button);
tm = (TelephonyManager) this
.getSystemService(Context.TELEPHONY_SERVICE);

mButton.setOnClickListener(new Button.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
GsmCellLocation gcl = (GsmCellLocation) tm.getCellLocation();
int cid = gcl.getCid();
int lac = gcl.getLac();
System.out.println("operator"+tm.getNetworkOperator()); //中国移动43600
int mcc = Integer.valueOf(tm.getNetworkOperator().substring(0,
3));
int mnc = Integer.valueOf(tm.getNetworkOperator().substring(3,
5));
/*
* 发送的格式:{
"version": "1.1.0" ,
"host": "maps.google.com",
"access_token": "2:k7j3G6LaL6u_lafw:4iXOeOpTh1glSXe",
"home_mobile_country_code": 460,
"home_mobile_network_code":0,
"address_language": "zh_CN",
"radio_type": "gsm",
"request_address": true ,
"cell_towers":[
{
"cell_id":36526,
"location_area_code":14556,
"mobile_country_code":460,
"mobile_network_code":0,
"timing_advance":5555
}
]
}
*/
try {
// 组装JSON查询字符串
JSONObject holder = new JSONObject();
holder.put("version", "1.1.0");
holder.put("host", "maps.google.com");
holder.put("address_language", "zh_CN");
holder.put("request_address", true);

JSONArray array = new JSONArray();
JSONObject data = new JSONObject();
data.put("cell_id", cid); // 25070
data.put("location_area_code", lac);// 4474
data.put("mobile_country_code", mcc);// 460
data.put("mobile_network_code", mnc);// 0
array.put(data);
holder.put("cell_towers", array);

// 创建连接,发送请求并接受回应
DefaultHttpClient client = new DefaultHttpClient();

HttpPost post = new HttpPost(
"http://www.google.com/loc/json");

StringEntity se = new StringEntity(holder.toString());

post.setEntity(se);
HttpResponse resp = client.execute(post);

HttpEntity entity = resp.getEntity();

BufferedReader br = new BufferedReader(
new InputStreamReader(entity.getContent()));
StringBuffer sb = new StringBuffer();
String result = br.readLine();

while (result != null) {

sb.append(result);
result = br.readLine();
}
/*
* 返回格式:   {
"location": {
"latitude": 51.0,
"longitude": -0.1,
"altitude": 30.1,
"accuracy": 1200.1,
"altitude_accuracy": 10.1,
"address": {
"street_number": "100",
"street": "Amphibian Walkway",
"postal_code": "94043",
"city": "Mountain View",
"county": "Mountain View County",
"region": "California",
"country": "United States of America",
"country_code": "US"
}
}
}
*/
JSONObject jsonObject = new JSONObject(sb.toString());

JSONObject jsonObject1 = new JSONObject(jsonObject
.getString("location"));

getAddress(jsonObject1.getString("latitude"), jsonObject1
.getString("longitude"));

//mTextView.setText(sb.toString());
} catch (Exception e) {
// TODO: handle exception
}

}

});
}

void getAddress(String lat, String lag) {
try {

URL url = new URL("http://maps.google.cn/maps/geo?key=abcdefg&q="
+ lat + "," + lag);
InputStream inputStream = url.openConnection().getInputStream();
InputStreamReader inputReader = new InputStreamReader(inputStream,
"utf-8");
BufferedReader bufReader = new BufferedReader(inputReader);

String line = "", lines = "";

while ((line = bufReader.readLine()) != null) {
lines += line;
}
if (!lines.equals("")) {

JSONObject jsonobject = new JSONObject(lines);
JSONArray jsonArray = new JSONArray(jsonobject.get("Placemark")
.toString());
for (int i = 0; i < jsonArray.length(); i++) {

mTextView.setText( jsonArray.getJSONObject(i).getString("address"));

}

}

} catch (Exception e) {
;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: