连接Google Map API批量获取地理位置经纬度
2010-10-26 20:51
337 查看
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Threading;
namespace GetLatLng
{
class Program
{
static void Main(string[] args)
{
//输出提示信息
Console.WriteLine("正在添加地理位置...");
Console.WriteLine("");
//定义一个泛型队列,用于存储地理位置名称
Queue<string> Locations = new Queue<string>();
//向队列中添加地理位置名称
Locations.Enqueue("北京");
Locations.Enqueue("上海");
Locations.Enqueue("广州");
Locations.Enqueue("深圳");
Console.WriteLine("地理位置添加完成!");
Console.WriteLine("");
Console.WriteLine("正在与Google Map API连接解析地址...");
//定义Google Map API指定的xml响应地址
string strUrl = "http://maps.google.com/maps/api/geocode/xml?address={0}&sensor=false";
//定义当前读取的字符串,初始化为空
string strCurrent = string.Empty;
//定义一个xml文档的引用
XmlDocument xmldoc;
//定义一个xml文档的根节点引用
XmlNode root;
//定义xml文档中有关经纬度信息的节点引用
XmlNode latlng;
//定义一个随机数实例,用于生成等待时间长度的整型值
Random rnd = new Random();
//定义一个等待时间的值变量
int waitTime;
//代码块标记NEXT
//用于在加载xml文档出现错误后指引跳转的方位
NEXT:
//循环读出排在队首的信息
//依次加载返回经纬度
while (Locations.Count != 0)
{
strCurrent = string.Empty;
xmldoc = null;
root = null;
latlng = null;
//删除并返回位于队首的信息
//生成xmldoc的实例
strCurrent = Locations.Dequeue();
xmldoc = new XmlDocument();
//尝试加载xml文档
//如果出错,随机生成一个等待时间
//在这个时间范围内执行线程休眠
//时间一到,跳转至NEXT
try
{
xmldoc.Load(string.Format(strUrl, strCurrent));
}
catch (Exception ee)
{
waitTime = rnd.Next(300000, 600000);
//鸣响PC喇叭
Console.Beep();
Console.WriteLine("加载XML文档出现错误,以下是错误描述:");
Console.WriteLine(ee.Message);
Console.WriteLine(string.Format("{0}秒后将重新连接至Google Map API", waitTime / 1000));
Console.WriteLine("");
//线程休眠
//时间长度由rnd生成
Thread.Sleep(waitTime);
//跳转至NEXT
goto NEXT;
}
//如果成功加载到xml文档
//指引根节点至GeocodeResponse
root = xmldoc.SelectSingleNode("GeocodeResponse");
//如果节点内信息为OK,表示成功解析
//输出地理位置名称和经纬度
if (root.FirstChild.InnerText == "OK")
{
latlng = root.SelectSingleNode("result/geometry/location");
Console.WriteLine(string.Format("{0} 纬度:{1},经度:{2}",
strCurrent,
latlng.ChildNodes[0].InnerText,
latlng.ChildNodes[1].InnerText));
}
//Google Map API规定普通用户每天仅有2,500 个地理位置查询请求
//如果超出会提示错误OVER_QUERY_LIMIT
//此处进行单独处理
else if (root.FirstChild.InnerText == "OVER_QUERY_LIMIT")
{
Console.Beep();
Console.WriteLine("已超出Google Map API规定的地址解析请求次数的最高值!程序已经退出...");
break;
}
//若返回其它错误进行提示
else
{
Console.Beep();
Console.WriteLine(string.Format("{0} 错误:{1}",
strCurrent, root.FirstChild.InnerText));
}
//当成功解析一个地址后
//执行线程休眠,目的是为了避免因频繁请求被Google认为是恶意请求
//当然,如果地理位置数量较少,可忽略此方法
Thread.Sleep(rnd.Next(3000, 10000));
}//end while
//若队列里元素数量为0
//表示全部成功解析
if (Locations.Count == 0)
{
Console.WriteLine("");
Console.WriteLine("地理位置解析完毕!");
}
}//end Main
}
}
试运行结果:
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Threading;
namespace GetLatLng
{
class Program
{
static void Main(string[] args)
{
//输出提示信息
Console.WriteLine("正在添加地理位置...");
Console.WriteLine("");
//定义一个泛型队列,用于存储地理位置名称
Queue<string> Locations = new Queue<string>();
//向队列中添加地理位置名称
Locations.Enqueue("北京");
Locations.Enqueue("上海");
Locations.Enqueue("广州");
Locations.Enqueue("深圳");
Console.WriteLine("地理位置添加完成!");
Console.WriteLine("");
Console.WriteLine("正在与Google Map API连接解析地址...");
//定义Google Map API指定的xml响应地址
string strUrl = "http://maps.google.com/maps/api/geocode/xml?address={0}&sensor=false";
//定义当前读取的字符串,初始化为空
string strCurrent = string.Empty;
//定义一个xml文档的引用
XmlDocument xmldoc;
//定义一个xml文档的根节点引用
XmlNode root;
//定义xml文档中有关经纬度信息的节点引用
XmlNode latlng;
//定义一个随机数实例,用于生成等待时间长度的整型值
Random rnd = new Random();
//定义一个等待时间的值变量
int waitTime;
//代码块标记NEXT
//用于在加载xml文档出现错误后指引跳转的方位
NEXT:
//循环读出排在队首的信息
//依次加载返回经纬度
while (Locations.Count != 0)
{
strCurrent = string.Empty;
xmldoc = null;
root = null;
latlng = null;
//删除并返回位于队首的信息
//生成xmldoc的实例
strCurrent = Locations.Dequeue();
xmldoc = new XmlDocument();
//尝试加载xml文档
//如果出错,随机生成一个等待时间
//在这个时间范围内执行线程休眠
//时间一到,跳转至NEXT
try
{
xmldoc.Load(string.Format(strUrl, strCurrent));
}
catch (Exception ee)
{
waitTime = rnd.Next(300000, 600000);
//鸣响PC喇叭
Console.Beep();
Console.WriteLine("加载XML文档出现错误,以下是错误描述:");
Console.WriteLine(ee.Message);
Console.WriteLine(string.Format("{0}秒后将重新连接至Google Map API", waitTime / 1000));
Console.WriteLine("");
//线程休眠
//时间长度由rnd生成
Thread.Sleep(waitTime);
//跳转至NEXT
goto NEXT;
}
//如果成功加载到xml文档
//指引根节点至GeocodeResponse
root = xmldoc.SelectSingleNode("GeocodeResponse");
//如果节点内信息为OK,表示成功解析
//输出地理位置名称和经纬度
if (root.FirstChild.InnerText == "OK")
{
latlng = root.SelectSingleNode("result/geometry/location");
Console.WriteLine(string.Format("{0} 纬度:{1},经度:{2}",
strCurrent,
latlng.ChildNodes[0].InnerText,
latlng.ChildNodes[1].InnerText));
}
//Google Map API规定普通用户每天仅有2,500 个地理位置查询请求
//如果超出会提示错误OVER_QUERY_LIMIT
//此处进行单独处理
else if (root.FirstChild.InnerText == "OVER_QUERY_LIMIT")
{
Console.Beep();
Console.WriteLine("已超出Google Map API规定的地址解析请求次数的最高值!程序已经退出...");
break;
}
//若返回其它错误进行提示
else
{
Console.Beep();
Console.WriteLine(string.Format("{0} 错误:{1}",
strCurrent, root.FirstChild.InnerText));
}
//当成功解析一个地址后
//执行线程休眠,目的是为了避免因频繁请求被Google认为是恶意请求
//当然,如果地理位置数量较少,可忽略此方法
Thread.Sleep(rnd.Next(3000, 10000));
}//end while
//若队列里元素数量为0
//表示全部成功解析
if (Locations.Count == 0)
{
Console.WriteLine("");
Console.WriteLine("地理位置解析完毕!");
}
}//end Main
}
}
试运行结果:
相关文章推荐
- 连接Google Map API批量获取地理位置经纬度
- 源码推荐(1.12):ZYDrawString实现对字符串的画线动画,iOS8获取当前经纬度、地理位置
- 用户Ip地址和百度地图api接口获取用户地理位置(经纬度坐标,城市)
- java调用百度地图API通过URL根据地理位置中文处理返回值获取经纬度
- html5获取用户当前的地理位置,即经纬度。
- java根据GPS(经纬度)获取地理位置
- React Native获取地理位置(获取具体城市、经纬度)
- Google glass GDK - 获取地理位置(经纬度)
- 微信小程序 获取当前地理位置和经纬度实例代码
- 【Java】 java调用百度地图API根据地理位置中文获取经纬度 地址备忘
- 根据经纬度来获取地理位置信息demo
- 通过经纬度获取地理位置详细信息
- 百度地图API,获取地址的经纬度,根据坐标位置获取地理位置,,获取两个地理坐标的直线距离
- java调用百度地图API根据地理位置中文获取经纬度
- CLGeocoder 根据地理位置获取经纬度,根据经纬度获取地理位置
- IOS模拟器能获取运营商信息,网络连接类型以及地理位置吗?
- Android根据IP获取地理位置,精确到经纬度
- iOS中利用系统地图获取定位信息(经纬度/地理位置)
- js获取地理位置的经纬度
- IOS模拟器能获取运营商信息,网络连接类型以及地理位置吗?