R实现地理位置与经纬度相互转换

浏览: 4254

本实例要实现目标通过输入城市名或者地名,然后找出其经度纬度值,以及通过可视化展现其线路流向以及周边地图展示

本实例参考文章主要来自金大侠博客:http://user.qzone.qq.com/675229288/main

address_list数据:

山西省太原市小店区亲贤北街77号

贵州省贵阳市云岩区书香门第B栋3单元

北京市通州区神树商业街168号

贵州省贵阳市南明区兴关路51

北京市东城区长巷二条乙5号

山西省太原市杏花岭区北肖墙12号

北京

北京市通州区

北京市的的的的的

天津市武清区

1、生成可视化地图

library(devtools)
#install_github('lchiffon/REmap')
library(REmap)
city_vec = c("北京","Shanghai","广州")
get_city_coord("Shanghai")
get_geo_position (city_vec)
set.seed(125)
origin = rep("杭州",5)
destination = c('台州','丽水','金华','温州','乡宁')
dat = data.frame(origin,destination)
out = remap(dat,title = "REmap实例数据",subtitle = "theme:Dark")
plot(out)
mapNames("杭州")

结果:


2、根据地名,生成其经纬度

#############使用百度API######################
############地理位置→经纬度###################
##############################################
library(REmap)
#library(RCurl)
#library(rjson)
#get_city_coord('杭州')
#导入地址列表
address <- read.table('address_list.txt',header = F, col.names=c('address'),as.is = c(1))
address <- address$address   #转化为向量格式,备for循环使用
head(address)
#建立备用向量,包括空向量及百度地图api秘钥
baidu_lng <- c()
baidu_lat <- c()
ak <- 'V5dWHCeG7jdMhcElzW自己的APIAK'     #百度地图api的秘钥,需自己申请
#加载包
library(rjson)
library(RCurl)
location <-address[1]
#循环解析过程
for (location in address) {
  #生成规则的url地址(具体参数可参考Geocoding API文档)
  url <- paste('http://api.map.baidu.com/geocoder/v2/?ak=',ak,'&callback=renderOption&output=json&address=',location,sep='')
  #利用URLencode()转换为可解析的URL地址
  url_string <- URLencode(url)
  #通过readLines读取URL地址,并解析JSON格式的结果
  json<- readLines(url_string, warn=F)
  geo <- fromJSON(substr(json,regexpr('\\(',json)+1,nchar(json)-1))
  #在解析结果中提取经纬度
  lng<-geo$result$location$lng
  lat<-geo$result$location$lat
  #存储到已经建好的字段中
  baidu_lng <- c(baidu_lng,lng)
  baidu_lat <- c(baidu_lat,lat)
}
#整理结果
result <- data.frame(address=address,longitude=baidu_lng,latitude=baidu_lat)
result

结果(对应address_list文件位置经纬度):


3、获取输入名字的百度地图展现

library(devtools)
#install_github('badbye/baidumap')
#install_github('lchiffon/REmap')
library(baidumap)
library(ggmap)
## Loading required package: ggplot2
#获取浙江中医药大学的地图信息
####http://www.gpsspg.com/maps.htm
q <- getBaiduMap(c(120.2230040000,30.2154520000), width=600, height=600, zoom=18, scale = 2, messaging=FALSE)
ggmap(q) #绘制地图
q <- getBaiduMap('浙江中医药大学', width=600, height=600, zoom=18, scale = 2, messaging=FALSE)
ggmap(q) #绘制地图

结果:


华青莲日常点滴,方便自己,成长他人!!!

推荐 3
本文由 华青莲 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册