今天依据需求要从百度API中取出一些数据。这些操作包含:将坐标转换成百度坐标。依据转换的百度坐标进行特定的查询。

有需求的收藏下,免得下次手写浪费时间。

涉及到的操作有:JSON格式的字符解析。HTTP请求和获得请求数据。文件流的写入和读出等等。

奉上源码。共享:

首先是入口函数:

static void Main(string[] args)
{
Console.WriteLine("坐标转换。信息查询開始......");
string oFile = "C:\\Users\\MisterHu\\Desktop\\点加属性\\聚类点.txt";
string iFile = "C:\\Users\\MisterHu\\Desktop\\点加属性\\result.txt"; List<string> tCoords = new List<string>();//存转换前坐标
List<string> cvtCoords = new List<string>();//存转换后坐标
List<string> rstQuery = new List<string>();//存查询结果 string sInfo; //暂时字符变量
StreamReader sr = new StreamReader(oFile, Encoding.Default);
while ((sInfo = sr.ReadLine()) != null)
{
tCoords.Add(sInfo.Substring(sInfo.IndexOf(',')+1));
}
sr.Close(); //转换成百度坐标。然后存放到List中
BaiDuAPI.CoordConvert(tCoords, cvtCoords); //从List中取出每一个坐标。然后调用API
BaiDuAPI.PlaceAPI(cvtCoords, rstQuery); //写入文件。
String strLine = null;
for (int i = 1; i <= 1000;++i )
{
strLine += i.ToString() + "," + tCoords[i - 1] + rstQuery[i - 1] + "\r\n";
} FileStream.WriteInFile(strLine, iFile);
Console.WriteLine("转换,获取,完毕!");
}

字符串输入输出到文件:

 //输入输出字符到文件里
public static class FileStream
{
public static void ReadFormFile(string path)
{ } public static void WriteInFile(string content,string path)
{
string iFile = "D:\\temp.txt";
if (path == null) path = iFile; StreamWriter sw = new StreamWriter(path);
sw.Write(content);
sw.Flush();
sw.Close();
}
}

核心类,细致看,依据自己的需求能够做适当的改动:

//处理API请求
public static class BaiDuAPI
{
public static void CoordConvert(List<string> src,List<string> des)
{
StringBuilder RequestURL = new StringBuilder();
StringBuilder coordStr = new StringBuilder();
string arg1 = "http://api.map.baidu.com/geoconv/v1/? coords=";
string arg2 = "&from=1&to=5&ak=IC96AbO521APtmpsaR9xCMqo"; string result = null;
int count = src.Count; for (int i = 0; i < count; ++i)
{
if ((i+1)%100 != 0 && i != count - 1) //将100个数据加进去
{
coordStr.Append(src[i]);
coordStr.Append(";");
continue;
}
else if ((i + 1) % 100 == 0 || i == count - 1) //处理不足100个数据和第100个数据
{
coordStr.Append(src[i]);
} RequestURL.Append(arg1);
RequestURL.Append(coordStr);
RequestURL.Append(arg2);
result = HttpGet(RequestURL.ToString()); //处理返回的结果
DoJsonCoords(result,des); result = null;
RequestURL.Clear();
coordStr.Clear();
} } public static void DoJsonCoords(string result, List<string> des)
{
if (result == "" || result == null) return; JsonCoord jsonCoord = JSON.ParseJson<JsonCoord>(result); List<Coord> coord = jsonCoord.result;
string temp = null;
foreach (Coord crd in coord)
{
temp = crd.y.ToString() + "," + crd.x.ToString();
des.Add(temp);
}
} /// <summary>
/// 返回结果字符串
/// </summary>
public static void PlaceAPI(List<string> des,List<string> rst)
{
//购物//教育//景点//企业//小区
List<string> query = new List<string>{ "购物", "教育","景点","企业", "小区"};
StringBuilder RequestURL = new StringBuilder();
StringBuilder tempQuery = new StringBuilder();
string arg1 = "http://api.map.baidu.com/place/v2/search? ak=IC96AbO521APtmpsaR9xCMqo&output=json&query=";
string arg2 = "&page_size=1&page_num=0&scope=1&location=";
string arg3 = "&radius=1000"; string jsonResult = null;
string tStr = null;
int num;
foreach (string str in des)
{
for (int i = 0; i < 5;++i )
{
tempQuery.Append(HttpUtility.UrlEncode(query[i]));
tempQuery.Append(arg2);
tempQuery.Append(str);
tempQuery.Append(arg3); RequestURL.Append(arg1);
RequestURL.Append(tempQuery.ToString()); jsonResult = HttpGet(RequestURL.ToString());
num = DoJsonPlace(jsonResult);
tStr += "," + query[i] + num.ToString(); tempQuery.Clear();
RequestURL.Clear();
}
rst.Add(tStr);
Console.WriteLine(tStr);
tStr = null;
}
} public static int DoJsonPlace(string result)
{
if (result == "" || result == null) return -1; Place place = JSON.ParseJson<Place>(result); return place.total;
} /// <summary>
/// 通过url获取返回来的字符串
/// </summary>
private static string HttpGet(string requestURL)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestURL.ToString());
request.Method = "GET";
request.ServicePoint.Expect100Continue = false;
request.Method = "GET";
request.KeepAlive = true;
request.UserAgent = ".NET Framework BsiDuAPI Client";
request.ContentType = "application/x-www-form-urlencoded;charset=utf-8"; HttpWebResponse response = null;
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException webEx)
{
if (webEx.Status == WebExceptionStatus.Timeout)
{
response = null;
}
Console.WriteLine(webEx.Status.ToString());
} if (response != null)
{
if (response.CharacterSet != null)
{
Encoding encoding = Encoding.GetEncoding(response.CharacterSet);
return GetResponseAsString(response, encoding);
}
else
{
return string.Empty;
}
}
else
{
return string.Empty;
}
} private static string GetResponseAsString(HttpWebResponse response, Encoding encoding)
{
StringBuilder result = new StringBuilder();
Stream stream = null;
StreamReader reader = null; try
{
// 以字符流的方式读取HTTP响应
stream = response.GetResponseStream();
reader = new StreamReader(stream, encoding); // 每次读取不大于256个字符,并写入字符串
char[] buffer = new char[256];
int readBytes = 0;
while ((readBytes = reader.Read(buffer, 0, buffer.Length)) > 0)
{
result.Append(buffer, 0, readBytes);
}
}
catch (WebException webEx)
{
if (webEx.Status == WebExceptionStatus.Timeout)
{
result = new StringBuilder();
}
}
finally
{
// 释放资源
if (reader != null) reader.Close();
if (stream != null) stream.Close();
if (response != null) response.Close();
} return result.ToString();
}
}

解析Json的类,没什么好说的直接copy:

//Json解析
public static class JSON
{
/// <summary>
/// 将Json反序列化为T对象
/// </summary>
public static T ParseJson<T>(string jsonString)
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);
}
} /// <summary>
/// 将对象序列化为Json
/// </summary>
public static string Stringify(object jsonObject)
{
using (var ms = new MemoryStream())
{
new DataContractJsonSerializer(jsonObject.GetType()).WriteObject(ms, jsonObject);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
} //序列化对象
[DataContract]
public class Coord
{
[DataMember]
public float x {get;set;} [DataMember]
public float y {get;set;}
} [DataContract]
public class JsonCoord
{
[DataMember]
public int status { get; set; } [DataMember]
public List<Coord> result { get; set; }
} [DataContract]
public class Place
{
[DataMember]
public int status { get; set; } [DataMember]
public string message { get; set; } [DataMember]
public int total { get; set; } //结果没用,不获取。
//[DataMember(IsRequired = false)]
//public string results { get; set; }
}

注意。序列化对象类的写法,值得提出的一点是当不须要某个节点时。能够不用写出来,就像results一样。由于我的需求根本不关心当中的内容。

最后,附上源码文件:http://download.csdn.net/detail/z702143700/8777263

百度API调用实例的更多相关文章

  1. 腾讯QQAndroid API调用实例(QQ分享无需登录)

    腾讯QQAndroid API调用实例(QQ分享无需登录)   主要分为两个步骤: 配置Androidmanifest.xml 修改activity里边代码 具体修改如下:   1.Activity代 ...

  2. 百度地图API调用实例之地址标注与位置显示

    之前弄了个谷歌地图API标注的调用实例,后来要求改成百度地图. 感谢主,通过网上资料(百度地图API,百度地图API详解之地图标注)收集及研究, 终于把百度地图标注和显示功能实现出来了,具体实现方法如 ...

  3. Python爬虫之百度API调用

    调用百度API获取经纬度信息. import requests import json address = input('请输入地点:') par = {'address': address, 'ke ...

  4. 毕设(一)C#的百度api调用

    这个学期就要毕业了,选了一个无人机地面站软件设计的题目,这几天也开始着手做, 首先做了一个百度地图的调用,这里因为是上位机的开发,所有就不介绍Javascript的 调用方法,核心是用到一个类Http ...

  5. H5Plus 入门学习-Dcloud H5+ API调用实例

    使用API Reference完整简单的操作,更多操作查看官方文档. 最后提供项目的下载地址[下载][一款移动APP演示]

  6. PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例

    原文:PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例 <!--小幅的坐标转换点位程序--> <!DOCTYPE html> <html&g ...

  7. 调用百度API进行文本纠错

    毕设做的是文本纠错方面,然后今天进组见研究生导师 .老师对我做的东西蛮感兴趣.然后介绍自己现在做的一些项目,其中有个模块需要有用到文本纠错功能. 要求1:有多人同时在线编辑文档,然后文档功能有类似Wo ...

  8. Vue 通过调用百度API获取地理位置-经度纬度省份城市

    一.首先在百度api注册获得ak密钥 二.新建js文件,我命名为loadBMap.js,里面创建script,代码如下: /** * 加载地图 * @param {Function} callback ...

  9. WPF技术触屏上的应用系列(二): 嵌入百度地图、API调用及结合本地数据库在地图上进行自定义标点的实现

    原文:WPF技术触屏上的应用系列(二): 嵌入百度地图.API调用及结合本地数据库在地图上进行自定义标点的实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系 ...

随机推荐

  1. 优动漫 PAINT 导航窗口面板

    导航窗口面板用于管理画布的视图.本节将介绍如何在其中缩放.旋转.翻转画布. 如何使用导航窗口面板 使用[导航窗口]面板便于把握整个画布,以下将为您详细介绍. 什么是[导航窗口]面板 [导航窗口]面板用 ...

  2. Django——Model

    一. ORM 在 MVC 或者说 MTV 设计模式中,模型(M)代表对数据库的操作.那么如何操作数据库呢? 我们可以在 Python 代码中嵌入 SQL 语句. 但是问题又来了,Python 怎么连接 ...

  3. pace.js 原理(转)

    pace.js监控了什么: pace.js对于加载进度监控了什么呢?通过阅读源码,我们看到整体的进度有四个部分组成:document,elements,eventLag和ajax这四种监视器(Moni ...

  4. NodeJS学习笔记 (1)资源压缩-zlib(ok)

    原文: https://github.com/chyingp/nodejs-learning-guide/blob/master/README.md 自己的跟进学习: 概览 做过web性能优化的同学, ...

  5. axios使用方法

    npm install axios 创建文件夹api/index.js import axios from 'axios'; let http = axios.create({ baseURL: '' ...

  6. HDU-2222 Keywords Search 字符串问题 AC自动机

    题目链接:https://cn.vjudge.net/problem/HDU-2222 题意 给一些关键词,和一个待查询的字符串 问这个字符串里包含多少种关键词 思路 AC自动机模版题咯 注意一般情况 ...

  7. luogu P2041 分裂游戏(结论题)

    题意 题解 一开始理解错题意了.以为这题不可解.. 其实这题当n>=3时都是无解的 然后n=1,2时的解都给出来了. 推荐一个博客的证明 #include<iostream> #in ...

  8. react-native 运行提示红屏 error: bundling failed: ambiguous resolution: module `/User/xxx/Project/ico/index.js` tries to require `react-native`, but there are several files providing this module. You can de

    运行 react-native start 报错 执行这2个进行清除缓存问题 yarn start -- --reset-cache  npm start -- --reset-cache  

  9. iOS6和iOS7处理push不同之处,解决反复push,-(void) application: didReceiveRemoteNotification: fetchCompletionHandl

    如果读者已经知道push的基本知识,本文仅仅是解决一些适配,兼容问题.如果对push 不甚了解,參考以下的文章 1.[iOS push全方位解析](一) push的概述 2.[iOS push全方位解 ...

  10. 代理server poll version

    poll和select一样,管理多个描写叙述符也是进行轮询,依据描写叙述符的状态进行处理,可是poll没有最大文件描写叙述符数量的限制,select is 1024/2048 #include &qu ...