GPS定位纬度,经度后,通过GOOGLE MAP API解析出地址
此次需要在WM手持设备上通过定位经纬度获得当前地址,最后选取GOOGLE MAP API 来获得当前地址
class googlemap
public class GoogleMap
{
//GoogleTest.parseAddressAndPoint("福山路380号", "json", "abcdefg");
//GoogleTest.parseAddressAndPoint("福山路380号", "xml", "abcdefg");
//GoogleTest.parseAddressAndPoint("福山路380号", "csv", "abcdefg");
//GoogleTest.parseAddressAndPoint("中国北京市", "json", "abcdefg");
//GoogleTest.parseAddressAndPoint("31.2255527,121.5303352", "json",
// "abcdefg"); // 纬度,经度 而不是 经度,纬度
//中国江苏省苏州市昆山市北门路405号 邮政编码: 215316
//31.403003,120.952179----31.4030040,120.9521810
//中国江苏省苏州市昆山市绿溪路31号 邮政编码: 215331
//31.31447,121.048393--31.3143010,121.0487470
//31.317065,121.045672
//31.318228,121.045429
/**
* 解析地址和反解析纠经度
*
* @param addressOrPoint
* : 中英文地址,或者是 纬经度,不是经纬度
* @param outPutType
* :这三个数据类型 : xml、json、csv 注:输出格式建议用JSON或CSV,XML格式有时候不能正常显示,比如
* 中国:35.8616600,104.1953970
* @param googleKey
* : 如果项目发布在网络上,可能要从GOOGLE申请一个GOOGLE MAP KEY才能正常使用
* 参考:http://code/.
* google.com/intl/zh-CN/apis/maps/documentation/services
* .html#Geocoding_Object
*/
public static String parseAddressAndPoint(String addressOrPoint, String outPutType, String googleKey)
{
string strOut = "";
try
{
String strURL = "http://ditu.google.cn/maps/geo?output=" + outPutType
+ "&q=" + addressOrPoint
+ "&sensor=false&key=" + googleKey;
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(strURL);
//创建一个httpRequest请求对象,包含要传递的值name;
httpWebRequest.Method = "GET";//传递的方法,必须要写,而已Get必须大写。
httpWebRequest.Timeout = 3000;
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();//创建一个响应对象,并重请求对象中得到响应对象的事例。
System.IO.Stream stream = null;//创建一个流对象(用来读取响应对象的内容)
stream = httpWebResponse.GetResponseStream();//得到回应过来的流
System.IO.StreamReader streamReader = new System.IO.StreamReader(stream, System.Text.Encoding.UTF8);//创建一个流的读取对象,用来输出传过来的内容
strOut = streamReader.ReadToEnd();
httpWebResponse.Close();//响应关闭,要不会占用网络资源
}
catch(Exception ex)
{
}
return strOut;
}
然后通过GMAP获得返回的JSON
string strjson = GoogleMap.parseAddressAndPoint(this.txtX.Text + "," + this.txtY.Text, "json", "abcdefg"); // 纬度,经度 而不是 经度,纬度
解析JSON 使用的是LitJson
//strjson = "{ \"name\": \"31.31447,121.048393\", \"Status\": { \"code\": 200, \"request\": \"geocode\" }, \"Placemark\": [ { \"id\": \"p1\", \"address\": \"中国江苏省苏州市昆山市绿溪路31号 邮政编码: 215331\", \"AddressDetails\": { \"Accuracy\" : 8, \"Country\" : { \"AdministrativeArea\" : { \"AdministrativeAreaName\" : \"江苏省\", \"Locality\" : { \"DependentLocality\" : { \"DependentLocalityName\" : \"昆山市\", \"PostalCode\" : { \"PostalCodeNumber\" : \"215331\" }, \"Thoroughfare\" : { \"ThoroughfareName\" : \"绿溪路31号\" } }, \"LocalityName\" : \"苏州市\" } }, \"CountryName\" : \"中国\", \"CountryNameCode\" : \"CN\" }}, \"ExtendedData\": { \"LatLonBox\": { \"north\": 31.3174486, \"south\": 31.3111534, \"east\": 121.0518946, \"west\": 121.0455994 } }, \"Point\": { \"coordinates\": [ 121.0487470, 31.3143010, 0 ] } } ]}";
好了,这样地址就能解析成功了