asp.net基站定位,通过传Cellid,Lac,Mcc,MNC,age,signal_strength,timing_advance
asp.net基站定位,通过传Cellid,Lac,Mcc,MNC,age,signal_strength,timing_advance,获得地名。
/// <summary>
/// 返回经纬度信息
/// 格式如下:
/// 22.506421,113.918245|22.497636,113.912647|22.496063,113.91121
/// </summary>
/// <param name="postData"></param>
/// <returns></returns>
public string GetLocationInfomation(string postData)
{
List<CellInfo> list = GetCellInfos(postData);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.Count; i++)
{
CellInfo info = list[i];
//基本步骤
//1. 生成发往google的json串
//2. 接收google返回的json串
//3. 解析json串,只取得经纬度
//4. 拼接经纬度
string json = GenerateRequestJson(info);
string content = GetResponseJson(json);
string latLon = ParseResponseJson(content);
sb.Append(latLon);
sb.Append("|");
}
return sb.ToString().Substring(0, sb.Length - 1);
//return sb.ToString();
}
/// <summary>
/// 接收从手机端发送过来的数据
/// '|'分割对象,','分割属性
/// </summary>
/// <param name="postData"></param>
/// <returns></returns>
private List<CellInfo> GetCellInfos(string postData)
{
string[] strInfos = postData.Split('|');
List<CellInfo> list = new List<CellInfo>();
for (int i = 0; i < strInfos.Length; i++)
{
string[] properties = strInfos[i].Split(',');
CellInfo info = new CellInfo();
info.CID = properties[0];
info.LAC = properties[1];
info.MCC = properties[2];
info.MNC = properties[3];
info.Age = properties[4];
info.Sith =properties[5];
info.Tiad =properties[6];
list.Add(info);
}
return list;
}
/// <summary>
/// 发送一个基站信息,并返回一个位置信息
/// 位置信息是以json串的形式存在
/// 需要对json串进行解析
/// </summary>
/// <param name="requestJson"></param>
private string GetResponseJson(string requestJson)
{
string responseJson = string.Empty;
try
{
ServicePointManager.Expect100Continue = false;
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] data = encoding.GetBytes(requestJson);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(@"http://www.google.com/loc/json");
// HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(@"http://www.google.com/glm/mmap");
myRequest.Method = "POST";
myRequest.ContentType = "application/requestJson";
myRequest.ContentLength = data.Length;
Stream newStream = myRequest.GetRequestStream();
// Send the data.
newStream.Write(data, 0, data.Length);
newStream.Close();
// Get response JSON string
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
responseJson = reader.ReadToEnd();
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
}
return responseJson;
}
/// <summary>
/// 解析从google Response的JSON串,获取经纬度
/// </summary>
/// <param name="responseJson"></param>
/// <returns></returns>
private string ParseResponseJson(string responseJson)
{
string lat = "";
string lon = "";
string country = "";
string region = "";
string city = "";
string street = "";
string street_number = "";
string accuracy = "";
StringBuilder latLon = new StringBuilder();
try
{
//System.Text.Encoding UTF8 = System.Text.Encoding.UTF8;
//System.Text.Encoding GB2312 = System.Text.Encoding.GetEncoding("GB2312");
//System.Text.Encoding Un = System.Text.Encoding.Unicode;
//Byte[] gb2 = System.Text.Encoding.Default.GetBytes(responseJson);
//responseJson = UTF8.GetString(gb2);
//gb2 = System.Text.Encoding.Default.GetBytes(responseJson );
//responseJson = GB2312.GetString(gb2);
//gb2 = System.Text.Encoding.Default.GetBytes(responseJson);
//responseJson = Un.GetString(gb2);
//responseJson = Un.GetString(gb2);
JObject obj = JObject.Parse(responseJson);
lat ="纬度:"+ obj["location"]["latitude"].ToString();
lon = "经度:" + obj["location"]["longitude"].ToString();
country = "国家:" + obj["location"]["address"]["country"].ToString();
region = "省份:" + obj["location"]["address"]["region"].ToString();
city = "城市:" + obj["location"]["address"]["city"].ToString();
street = "街道:" + obj["location"]["address"]["street"].ToString();
street_number = "街道号码:" + obj["location"]["address"]["street_number"].ToString();
accuracy = "精确度:" + obj["location"]["accuracy"].ToString();
latLon.Append(lat);
latLon.Append(",");
latLon.Append(lon);
latLon.Append(",");
latLon.Append(country);
latLon.Append(",");
latLon.Append(region);
latLon.Append(",");
latLon.Append(city);
latLon.Append(",");
latLon.Append(street);
latLon.Append(",");
latLon.Append(street_number);
latLon.Append(",");
latLon.Append(accuracy);
}
catch (Exception ee)
{
return "";
}
return latLon.ToString();
}
/// <summary>
/// 生成发往http://www.google.com/loc/json的json串
/// 仅仅只有一个基站
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
private string GenerateRequestJson(CellInfo info)
{
//string mac_address = "01-23-45-67-89-ab";
string json = "";
json += "{";
json += "\"version\":\"1.1.0\"" + ",";
json += "\"host\":\"maps.google.com\"" + ",";
json += "\"request_address\": \"true\"" +",";
json += "\"address_language\": \"zh_CN\"" + ",";
json += "\"cell_towers\":[";
json += "{";
json += "\"cell_id\":" + info.CID + ",";
json += "\"location_area_code\":" + info.LAC + ",";
json += "\"mobile_country_code\":" + info.MCC + ",";
json += "\"mobile_network_code\":" + info.MNC+",";
json += "\"age\":"+info.Age+",";
json += "\"signal_strength\":"+info.Sith+",";
json += "\"timing_advance\":" +info.Tiad;
json += "}";
json += "],";
json += "\"wifi_towers\": [{";
//json += "\"mac_address\":" + mac_address + ",";
//json += "\"signal_strength\":"+info.Sith+",";
//json += "\"age\":" + info.Age;
json += "}]";
json += "}";
return json;
}
}
其中GenerateRequestJson中的传age,signal_strength ,timing_advance和不传这三个值,返回的结果是一样的