您的位置:首页 > 其它

调用百度地图API进行地理编码和反地理编码(二)——批量处理

2015-04-02 10:12 381 查看
在(一)中主要介绍了单个数据的处理,后来又请教了于斐老师关于批量处理的操作,请于老师帮忙做了一个批量处理的。

点击“选择文件”后,执行相关操作。

Excel表的第一列输入纬度,第二列输入经度,处理后可在第三列生成结果。

地址生成:

private string GetAddress(string lat,string lng)
{
string address = "";
string url = "http://api.map.baidu.com/geocoder/v2/?ak=cjGihoxPa1pjcIZbGdRLMfS8&output=json&location=" + lat + "," + lng + "&pois=0";

WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url);
StreamReader sr = new StreamReader(stream);
string strLine = "";
while ((strLine = sr.ReadLine()) != null)
{
JsonObject js = JsonObject.Parse(strLine) as JsonObject;
if (js["status"].ToString() =="0")
{
address =  js["result"]["formatted_address"].ToString();

}
}
sr.Close();

return address;
}
Excel操作(选择文件)

private void button1_Click(object sender, EventArgs e)
{
string filepath = "";
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Text files (*.xls)|*.xls|All Files(*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
{
MessageBoxButtons messButton = MessageBoxButtons.OKCancel;
DialogResult dr = MessageBox.Show("确定要生成编码?", "确定", messButton);

if (dr == DialogResult.OK)
{

filepath = ofd.FileName;
Workbook workbook = new Workbook();
workbook.Open(filepath);
Cells cells = workbook.Worksheets[0].Cells;

progressBar1.Maximum = cells.MaxDataRow;
for (int i = 0; i < cells.MaxDataRow + 1; i++)
{
string s = cells[i, 0].StringValue.Trim();
string j = cells[i, 1].StringValue.Trim();
//调用编码接口
cells[i, 2].PutValue(GetAddress(s,j));
//cells[i, 3].PutValue(s+"--"+j);
//progressBar1.Value = i;
}
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "导出Excel(*.xls)|*.xls";

if (sfd.ShowDialog() == DialogResult.OK)
{
if (!string.IsNullOrEmpty(sfd.FileName))
{
filepath = sfd.FileName;
workbook.Save(filepath);
MessageBox.Show("生成成功!");
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: