利用百度地图Geocoding API获取特定地区或地址的经纬度信息

Geocoding API 是百度提供的服务接口,主要是用于提供从地址解析到经纬度坐标或者从经纬度坐标解析到地址的转换服务,用户可以通过发送请求就可以接收到JSON或者XML格式的返回数据。

网络上大部分提供的代码啊,解决思想啊都是以google map为标准的,其实他们的解决思想都是异曲同工的。在此,发一个链接先让你了解了解这个百度地图API>Web服务API>Geocoding API v2.0借口思路。。。

http://developer.baidu.com/map/webservice-geocoding.htm#.E6.9C.8D.E5.8A.A1.E5.9C.B0.E5.9D.80

Geocoding API地址解析就是获取经纬度数据,根据地址以及城市名称这两个参数来调用。以下是一个关于地理编码的简单示例。发送一个地址参数请求,返回该地址对应的地理坐标。发送请求的url如下:

http://api.map.baidu.com/geocoder/v2/?ak=2ae1130ce176b453fb29e59a69b18407&callback=renderOption&output=xml&address=文化路97号&city=郑州市

这个就是请求时的百度地图Geocoding API服务地址,诸如此类形式。ak就是密钥,有百度账号你就能获取。其他的就没什么说的,是接收JSON格式的数据还是XML格式的数据,随自己喜欢,但懂得在自己的代码中变通。。。。

说实在的,刚接触这个东西,也没有什么头绪,就七八乱糟的在百度上云游了一番,找了好多链接,有js的,有.net的,什么都有,有看懂的也要不了解的。但不过学习嘛,总归要靠自己,对于编程用一句话来说:那就是站在前人的肩膀上,思索!!!!

对于今天所说的话题,这个链接给了我很多启示,非常感谢!http://www.cnblogs.com/liuhaorain/archive/2012/05/04/2334018.html 希望也对您有所帮助...

我是获取xml格式的数据,测试代码如下:

static void Main(string[] args)
        {
            Console.WriteLine("请输入标准的地址信息...");
            string fulladress = Convert.ToString(Console.ReadLine());
            Console.WriteLine("请输入城市名称...");
            string cityname = Convert.ToString(Console.ReadLine());
            WebClient client = new WebClient();//webclient客户端对象
            string url = "http://api.map.baidu.com/geocoder/v2/?ak=2ae1130ce176b453fb29e59a69b18407&callback=renderOption&output=xml&address="+fulladress+"&city="+cityname+"";
            
            client.Encoding = Encoding.UTF8;//编码格式
            string responseTest = client.DownloadString(url);//下载xml响应数据

            XmlDocument doc = new XmlDocument();//创建XML文档对象

            if (!string.IsNullOrEmpty(responseTest))
            {
                doc.LoadXml(responseTest);//加载xml字符串

                //获取状态信息
                string xpath = @"GeocoderSearchResponse/status";
                XmlNode node = doc.SelectSingleNode(xpath);
                string status = node.InnerText.ToString();

                if (status == "0")
                {
                    //获取坐标信息
                    xpath = @"GeocoderSearchResponse/result/location";
                    node = doc.SelectSingleNode(xpath);
                    string loc = node.InnerXml.ToString();
                    doc.Save(@"D:\location.xml");
                    Console.WriteLine("坐标:{0}", loc);//输出坐标信息
                }
            }

            Console.Read();
        }

这段代码我有必要说一下,请求的地址url按代码中的形式即可。发送请求之后,当然得响应请求返回数据string responseTest = client.DownloadString(url);//下载xml响应数据。。。

加载响应数据后,第一先判断状态,决定是否返数据。第二就是获取坐标信息,这比较关键,很多都不知道怎么改,其实就是获取您想要的数据在xml文档中的路径,就是它:

xpath=@"GeocoderSearchResponse/result/location";而Google map 缺是不一样,xpath = @"GeocodeResponse/result/formatted_address";这两个路径其实就是根节点不一样。。。

string loc = node.InnerXml.ToString();这句代码是获取location节点下的子节点数据,包括lat与lng,经纬度。想说的是node的属性,

1.InnerText获取或设置节点及其所有子节点的串联值,如果您选择这个属性,获取的经纬度的值就是一行不分开,如39.910093116.403945

2.InnerXml获取或设置仅代表该节点的子节点的标记,结果是<lat>39.910093</lat> <lng>116.403945</lng>

最后呢,说一点,如果您想把返回的数据保存到本地,如 doc.Save(@"D:\location.xml"); 这样可以获取数据,以便有其他的用处。

一家之言,仅供参考,共同学习,共同进步,谢谢!!! 

 

posted on 2013-05-30 11:18  行意  阅读(3106)  评论(0编辑  收藏  举报

导航