先利用baidumap包获取经纬度,该包需要用到百度密钥;再用geosphere包获得直线距离。

library(rjson)
library(jsonlite)
# library(devtools)                        # 在github上下载baidumap包
# install_github('badbye/baidumap', force=TRUE)
library(baidumap)
options(baidumap.key = '你的百度密钥')     # 百度密钥
# 下面设置函数
coords = function(i) {
  data = getCoordinate(i) 
  df = as.data.frame(fromJSON(data))   # 将json格式转化为R的格式
  lng = df $ result.location.lng       # 获得经度
  lat = df $ result.location.lat       # 获得纬度
  return (c(lng,lat))                  # 整合经度和纬度     
}
address1 = coords('杭州市')      # 获得杭州市坐标  
address2 = coords('南京市')      # 获得南京市坐标  
address1; address2

在RStudio中,显示结果如下:

f44574165e85b09bec9861f924cb8b09.png
# 下面测算两地直线距离
library(geosphere)               # 安装此包
places = rbind(address1, address2)  
places
mode(places)
distance = distm(places)         # 获得两地直线距离   
distance                         # 输出结果为2*2矩阵

在RStudio中,显示结果如下:

7832020f7208771638435fc126baf111.png

结果显示:南京与杭州间的直线距离为242117.3米。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐