利用R语言通过百度地图API进行批量地理编码
当您有大量的地点名称需要在地图上来呈现时,首先要在在线地图上找到该地址的坐标,通常是指经纬度,如果能够用代码来实现,便少了许多费时费力的体力活儿,以下将详细介绍地理编码的详细实现路径,即使您是一个编程小白,只要会打开软件,也可轻松搞定批量地理编码。
文章目录
- 利用R语言通过百度地图API进行批量地理编码
- 前言
- 一、基本概念
- 1 什么是地理编码?
- 2 什么是API?
- 3 如何申请百度地图API的秘钥?
- 二、代码案例
- 1.加载需要的R包
- 2.将百度地理编码封装为一个函数
- 3.利用for循环实现批量地理编码
- 总结
前言
地理编码的意义在于将地球上的地理位置与数字编码联系起来,以方便对地理信息进行管理和分析。地理编码可以将地球表面的位置信息(如地址、经纬度、邮政编码等)转换为一系列数字编码,从而可以快速进行数据检索、分析、可视化等操作。地理编码被广泛应用于许多领域,如地图制作、地理信息系统、物流和交通管理、房地产和城市规划等。它可以提升企业、政府决策的精准性和科学性,便于人们更好地理解和掌握地球上各种资源和环境的分布和变化。
提示:以下是本篇文章正文内容,下面案例可供参考
一、基本概念
首先了解一下什么是地理编码、什么是API、如何申请百度地图API的秘钥,对这些了解的同学可以选择自动跳过,直接看代码部分哦。
1 什么是地理编码?
地理编码是将地球上的物理位置信息(如地址、经纬度、邮政编码等)与一系列数字编码联系起来的过程。它通常通过利用空间数据进行地理位置解析,将地理位置映射到数字编码,以便于地理信息的管理和分析。
2 什么是API?
API指的是Application Programming Interface,翻译成中文是应用程序编程接口。它是软件系统之间相互通信和交互的一种方式。API可以让不同的软件之间实现数据或功能的共享,让它们协同工作,提高整个系统的效率和稳定性。
简单来说,API就是一个程序软件向外界提供的接口,定义了它可以接收哪些请求和数据,以及如何将其响应和输出。通过API,不同的应用程序或系统之间可以相互协作和集成,以实现数据共享和业务流程的自动化。在互联网和移动应用程序开发中,API起着非常重要的作用,促进了开发效率和软件之间的互动,为用户提供了更完美的体验。
3 如何申请百度地图API的秘钥?
以下是申请百度API密钥的步骤:
-
进入百度开发者平台(https://developer.baidu.com/),并登录账号。
-
如果您还没有注册,需要先注册百度账号,注册后选择“百度地图开放平台”。
-
然后选择开发文档下面的“地理编码”,点击后可以看到相关教程。
-
在创建应用页面,填写应用名称、应用简介等相关信息。
-
在应用类型中选择适合您的API类型,例如:搜索、地图、语言处理等。
-
根据不同的API类型,需要填写相应的验证信息和添加必要的授权域名。
-
在最后的页面中,您将看到分配给您的apiKey和secretKey。这两个密钥用于验证您的应用程序和百度API之间的通信。
请注意,使用百度API时,需要遵守相关规定和协议。使用API时需要按照相关文档说明来发送请求、解析响应和处理错误等,同时需要遵守相关的使用限制和类型的API调用频率等。详情见:https://lbsyun.baidu.com/faq/api?title=webapi/guide/webservice-geocoding/prepare
二、代码案例
代码案例如下:
1.加载需要的R包
代码如下(示例):
#install.packages(c("readxl","rjson","RCurl"))
library(readxl)
library(rjson)
library(RCurl)
2.将百度地理编码封装为一个函数
代码如下(示例):
##输入秘钥
ak <- '输入您申请的秘钥'
##########函数封装############
##封装一个函数,能够通过百度地图地理编码API接口,生成地址的经度和纬度,并返回可信度、地址类型等
baidu_geocoding <- function(address_input){
#生成百度地图api的服务地址 参数ak请在百度地图官网申请
address_url <- paste('http://api.map.baidu.com/geocoder/v2/?ak=',ak,
'&callback=renderOption&output=json&address=',address_input,sep='')
#利用URLencode()转换为可解析的URL地址
url_string<-URLencode(address_url)
#通过readLines读取URL地址,并解析JSON格式的结果
json<-readLines(url_string, warn=F)
geo<-fromJSON(substr(json,regexpr("status",json)-2,nchar(json)-1))
#在解析结果中提取经纬度
lng<-geo$result$location$lng #经度
lat<-geo$result$location$lat #纬度
confidence <- geo$result$confidence #描述打点绝对精度
comprehension <- geo$result$comprehension #描述地址理解程度
level <- geo$result$level #描述地址类型
return(c(address_input,lng,lat,confidence,comprehension,level))
# 函数说明:
# 函数名:baidu_geocoding
# 功能:能够通过百度地图地理编码API接口,生成地址的经度、纬度等信息
# 参数:address_input - 一个地址名称
# 返回值:lng,lat,confidence,comprehension,level
############end-end-end############
测试以上函数,结果如下:
##测试baidu_geocoding()函数
>baidu_geocoding("上海市东方明珠电视塔")
[1] "上海市东方明珠电视塔" "121.506378708002" "31.2454137544021" "50"
[5] "100" "旅游景点"
对以上结果进行验证:通过百度坐标拾取系统发现输出结果(经纬度)与测试用例输出结果,说明以上代码的识别结果是准确的。
3.利用for循环实现批量地理编码
##读取源数据
address <- read_excel("address.xlsx")
address_name <- address[,2]
n <- nrow(address_name)
##构建临时数据框
address_coordinate <- data.frame()
##调用baidu_geocoding函数,利用for循环实现批量地理编码
for (i in 1:n) {
address_input_i <- address_name[i,1]
address_inf_i <- baidu_geocoding(address_input_i)
address_inf_i <- data.frame(address_inf_i)
names(address_inf_i) <- c("name","lng","lat","confidence","comprehension","level")
address_coordinate <- rbind(address_coordinate,address_inf_i)
print(i)
print(i/n)
}
##导出数据
write.csv(address_coordinate,"address_result.csv")
总结
提示:这里对文章进行总结:
本文开篇介绍了地理编码的概念内涵,地理编码的意义,以及如何申请百度地图地理编码秘钥,然后介绍了详细的地理编码代码示例,封装形成了一个地理编码函数,并对该函数的识别结果进行验证,该代码的识别结果具有高度的准确性。最后,用一个简单的示例,实现了对Excel中的地址进行批量地理编码。
思考:以上代码已实现批量对地址进行地理编码,但是该方法解译出来的结果是百度坐标系,如何通过代码形式转为常用的WGS坐标系。