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

转发http://www.cnblogs.com/fanyongbin/p/5000791.html

############################################
# 输入国内两个地点
# 根据经纬度计算两个经纬度之间的距离
############################################

# 计算距离函数
add_dist <- function(address1,address2){

        add_id <- c(address1,address2)

        #载入需要的包
        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)


        result <- data.frame(address1,address2,dist)

        return(result)
}


# 测试
add_dist("深圳大学","北京师范大学")
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值