(从我的新浪博客上搬来的,做了一些修改。)

最近迷上了node.js以及JavaScript。现在接到一个活,要解析一个出租车点位数据的地理信息。于是就想到使用Node.js调用百度地图API进行解析。
使用的库主要就是有fs、request。
// 请求包
var fs = require('fs');var request = require('request'); // 设置百度API的参数var baiduApiKey = "cQV9U4QhamoOjg6rjdOTAQSiUMxxxxxx"; // 填写申请的的ak // 打开点位信息的JSON文件
var jsonString = "";
// 创建日志文件写文件流
var write = fs.createWriteStream("20140510_GetonDropoff_0h-log.txt");
// 创建读取文件流
var sr = fs.createReadStream('20140510_GetonDropoff_0h.json',{flags:'r',mode:0666});
sr.on('data', function (chunk) {
// 监听读取事件
jsonString += chunk;
})
sr.on('error', function (err) {
// 监听错误事件
console.log(err);
}) sr.on('end', function () {
// 监听读取完毕事件
var jsonData = JSON.parse(jsonString);
var i = 0;
// 对每一条记录进行循环
for (var listIndex in jsonData) {
if (jsonData.hasOwnProperty(listIndex)) {
var element = jsonData[listIndex];
var longitude = element['Lon'];
var latitude = element['Lat']; // 构造百度web服务API的URL
var rootUrl = 'http://api.map.baidu.com/geocoder/v2/?'; // 根URL
var url = rootUrl + 'output=json' + '&ak=' + baiduApiKey + '&location=' + latitude + ',' + longitude; // GET参数字符串
// 发送GET请求
request.get(url, function (err, response, body) {
i++; // 指示当前内容是哪一个点
// 解析body
try {
var responseJson = JSON.parse(body);
// 解析成功
if (responseJson['status'] == 0) {
// 如果返回正常解析数据
console.log(i + ": Success!");
var formatted_address = responseJson['result']['formatted_address']; // 提取结构化地址
jsonData[i-1]['formatted_address'] = 'formatted_address'; // 加入结构化地址中
} else {
// 如果返回错误解析数据
console.log(i + ": Fail! " + responseJson['status']);
jsonData[i-1]['formatted_address'] = "";
write.write(i + ': 请求失败!错误代码:' + responseJson['status'] + "\r\n");
}
} catch (error) {
// 解析失败
jsonData[i-1]['formatted_address'] = "";
console.log(i + ": Error!" + error.stack);
console.log(body); // 输出body以供参考
write.write(i + ": " + error.stack);
write.write(""body":" +body);
} // 如果是最后一个点,关闭文件并将结果写入
if (i == jsonData.length) {
write.end();
write.close();
fs.writeFileSync("20140510_GetonDropoff_0h" + "-add" + ".json", JSON.stringify(jsonData));
}
})
}
}
sr.close();
}); write.on('err', function (err) {
// 监听write的err事件
console.log(err.stack);
})

后来将填写URL的部分,改用qs和querystring都失败了,原因是:百度地图API要求的格式是 location=latitude,longitude ,而如果将location的值写成一个数组,即 [latitude,longitude] ,querystring会变成 location=latitude&location=longitude ,qs可以变成以下三种形式:

  • location=latitude&location=longitude
  • location[0]=latitude&location[1]=longitude
  • location[]=latitude&location[]=longitude

都不符合百度地图API接口的要求。

如果想要避免字符串连接的麻烦,使用string-format库也非常方便,只是url也会敲很长,也不如使用querystring库美观。

或者可以这样使用querystring模块。

querystring.unescape(querystring.stringify({
output: "json",
ak: "xxxxxxxxxxxxxxxxxxxxxxxxx",
location: latitude + "," + longitude
}))

Node.js调用百度地图Web服务API的Geocoding接口进行点位反地理信息编码的更多相关文章

  1. C# 调用百度地图Web服务API

    最近公司项目中需要根据两个地点的交通路径和距离做一些数据推荐,为了程序的稳定和用户体验所以想从百度地图 API 采集数据保存到数据库中,经过一翻研究之后选定了百度地图 Web 服务 API 中的 Di ...

  2. C# 调用百度地图 Web 服务 API

    最近公司项目中需要根据两个地点的交通路径和距离做一些数据推荐,为了程序的稳定和用户体验所以想从百度地图 API 采集数据保存到数据库中,经过一翻研究之后选定了百度地图 Web 服务 API 中的 Di ...

  3. js调用百度地图接口

    原文:js调用百度地图接口 这是前几天公司做的新项目,上面需要用到地图的数据.第一次做这类型的东西没啥思路,咱们经理说,这东西简单,截个图存文件夹里调整好尺寸,数据库里存上图片的地址动态调用就行了.心 ...

  4. 【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件

    目录 概述 功能 如何使用 参考帮助 概述 源代码主要包含三个项目,BMap.NET.BMap.NET.WindowsForm以及BMap.NET.WinformDemo. BMap.NET 对百度地 ...

  5. 【转】【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件

    [转][完全开源]百度地图Web service API C#.NET版,带地图显示控件.导航控件.POI查找控件 目录 概述 功能 如何使用 参考帮助 概述 源代码主要包含三个项目,BMap.NET ...

  6. Node.js 从零开发 web server博客项目[接口]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  7. js调用百度地图api

    <!DOCTYPE html> <html>     <head>         <meta charset="UTF-8">   ...

  8. js调用百度地图API创建地图,搜索位置

    实现代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <met ...

  9. C#怎么调用百度地图Web API

    直接上代码: public ActionResult FindMileage() { string s; HttpWebRequest req = (HttpWebRequest)HttpWebReq ...

随机推荐

  1. Google Hacking的实现以及应用

    Google Hacking其实并算不上什么新东西,在早几年我在一些国外站点上就看见过相关的介绍,但是由于当时并没有重视这种技术,认为最多就只是用来找找未改名的mdb或者别人留下的webshell什么 ...

  2. Android学习路径(四)文件项目学习的名单,android显示单元经常使用的

    1.的该项目文件所谓名单AndroidManifest.xml文件.该文件,但有很大的利用,例:app名字.图标,app支持的版本app等等.以下我就介绍下这个清单文件的各个參数的作用. <ma ...

  3. MobileProbe的使用

    MobileProbe是CNZZ移动这块统计的一个产品,目前似乎分成了基础版和专业版.下载地址为: http://m.cnzz.com/?a=main&m=download&f=inf ...

  4. QMVC

    高性能.NET MVC之QMVC! ASP.NET!这个词代表者一个单词Fat!因为他总是捆绑着太多的太多的类,太多太多的各种功能!你也许会用到,如果你反编译或阅读他们开源的源码,你会不会犹如在大海中 ...

  5. 列表类型转换(ConvertList<TSource, TResult>)

    性能优化-列表类型转换(ConvertList<TSource, TResult>) 2013-12-16 16:55 by stevey, 426 阅读, 7 评论, 收藏, 编辑 之前 ...

  6. web 安全知识

    目录 背景最简单的 Web 物理架构攻击方式总览Web 软件安全攻击防护浏览器安全攻击Cookie 假冒隐藏变量修改跨站脚本攻击服务器安全攻击缓冲区溢出认证逃避非法输入授权逃避SQL 注入异常敏感信息 ...

  7. Emacs助力PowerShell

    Emacs助力PowerShell 阅读目录 1 下载安装Emacs windows版本 2 下载el文件和配置Emacs加载PowerShell 3 体验用Emacs来执行和编辑PowerShell ...

  8. 2013年全球IT公司市值排行榜

    开源的应用快速开发平台 排名 公司 市值 国家 荣誉 1 苹果 5006.1 美国 全球市值最大的公司 2 谷歌 2324.4 美国 全球最伟大的互联网公司 3 三星 2290.7 韩国 全球最大的智 ...

  9. 案例研究:Web应用出现间歇性的SqlException

    案例研究:Web应用出现间歇性的SqlException 2013-07-29 14:36 by 微软互联网开发支持, 231 阅读, 3 评论, 收藏, 编辑 最近有客户找到我,说他们生产环境的事件 ...

  10. Composite C1是一个.Net平台上开源专业的CMS开源项目

    CompositeC1 4 发布 Composite C1是一个.Net平台上开源专业的CMS开源项目,很多的功能用户界面,面向任务的支持与各种工具协作.当编辑内容时在用户端体验很友好.编辑器与开发者 ...