asp.net基站定位,通过传Cellid,Lac,Mcc,MNC,age,signal_strength,timing_advance

zhoulihong_1986 2010-05-07 11:55:35
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和不传这三个值,返回的结果是一样的
...全文
1767 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ecdyf1989 2012-11-09
  • 打赏
  • 举报
回复
测试能用,可是我写的就是提示400错误,复制上面的就通过,应该是构造json的事
Nigel-Wen 2010-07-24
  • 打赏
  • 举报
回复
?自己发帖自己搞定啦?

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧