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 ]    }  } ]}";

       

好了,这样地址就能解析成功了

 

 

         

 

 

 

posted @ 2011-07-28 14:24  K.chaos  阅读(860)  评论(0编辑  收藏  举报