首页 > 编程语言 > 详细

利用R语言计算国内两个地点的距离

时间:2015-11-27 17:14:53      阅读:845      评论:0      收藏:0      [点我收藏+]
############################################
# 输入国内两个地点
# 根据经纬度计算两个经纬度之间的距离
############################################

# 首先运行计算距离函数

# 输入要计算距离的两个地名
# 要求为国内地址,输入为汉字。
add_id <- c("北京师范大学","深圳大学")

# 输出距离
add_dist(add_id)



# 计算距离函数
add_dist <- function(add_id){
    
    #载入需要的包
    library(rjson)
    library(RCurl)
    library(geosphere)
    
    #输入自己申请的百度地图的AK密钥
    AK <- "hplC6hoMjuulBA0cU2IlAtTW"
    
    
    
    #设定空向量
    baidu_lat <- c()
    baidu_lng <- c()
    baidu_geo <- c()
    address <-c()
    
    for (location in add_id) {
        #建立地址转换网址
        url <- paste("http://api.map.baidu.com/geocoder/v2/?ak=",AK,"&output=json&address=",location, sep = "")
        url_string <- URLencode(url)
        
        # 捕获连接对象
        connect <- url(url_string)
        
        
        
        # 处理json对象
        temp_geo <- fromJSON(paste(readLines(connect,warn = F), collapse = ""))
        temp_lat<-temp_geo$result$location$lat
        temp_lng<-temp_geo$result$location$lng
        
        # 关闭连接
        close(connect)
        
        baidu_geo  <-c(baidu_geo,temp_geo)
        baidu_lat <- c(baidu_lat,temp_lat)
        baidu_lng <- c(baidu_lng,temp_lng)
        address <- c(address,location)
    }
    
    content <- data.frame(address,baidu_lat,baidu_lng)
    
    # 提取经纬度
    lonlat <- cbind(content$baidu_lng,content$baidu_lat)
    
    # 精确计算,椭圆
    # 应用航海上运用广泛的半正矢公式
    # 详细见https://zh.wikipedia.org/wiki/%E5%A4%A7%E5%9C%86%E8%B7%9D%E7%A6%BB
    
    dist = round(distm(lonlat[1,],lonlat[2,], fun=distVincentyEllipsoid),0)
    
    address1 <- add_id[1]
    address2 <- add_id[2]
    
    
    result <- data.frame(address1,address2,dist)
    
    return(result)
}

感谢:

1.http://www.zhihu.com/question/28565852/answer/69047752

利用R语言计算国内两个地点的距离

原文:http://www.cnblogs.com/fanyongbin/p/5000791.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!