【问题标题】:Reverse Geocoding Multiple Lon/Lat R反向地理编码多个 Lon/Lat R
【发布时间】:2017-04-07 01:06:44
【问题描述】:

注意:我对 R 没有太多经验。我希望这不会太过分!

我正在尝试将美国经度和纬度数据集的地理编码反向为其邮政编码。

首先,我更喜欢不受查询限制的东西(如谷歌地图 API)。如果这是不可能的,我们将不胜感激以下帮助。

我学会了使用从以下博客 post 中找到的函数 reverseGeoCode() 对单个坐标进行反向地理编码。它很好用,但我正在尝试对坐标列表进行反向地理编码。

#load in my data
dir()
tw.data <- read.csv(file.choose(),header=T)
#organize coodinates
long <- tw.data[,7]
lat <- tw.data[,8]
coords <- cbind(long,lat)

#reverse geocoding
reverseGeoCode <- function(latlng) {
latlngStr <-  gsub(' ','%20', paste(latlng, collapse=","))#Collapse and Encode     URL Parameters
  library("RJSONIO") #Load Library
  #Open Connection
  connectStr <- paste('http://maps.google.com/maps/api/geocode/json?sensor=false&latlng=',latlngStr, sep="")
  con <- url(connectStr)
  data.json <- fromJSON(paste(readLines(con), collapse=""))
  close(con)
  #Flatten the received JSON
  data.json <- unlist(data.json)
  if(data.json["status"]=="OK")
    address <- data.json["results.formatted_address"]
  return (address)
}
addresses <- reverseGeoCode(coords)
addresses

我需要以不同的方式组织我的坐标吗?这个函数是不是连多点处理都没有?

任何帮助都会非常感谢 :)

【问题讨论】:

  • 那个 API 已经被ggmap::revgeocode包装了

标签: r google-maps-api-3 coordinates reverse-geocoding


【解决方案1】:

假设你有一个matrix 的坐标。你可以使用apply:

#create some random coordinates
set.seed(3)
coords<-matrix(runif(10,0,45),ncol=2) 
#          [,1]      [,2]
#[1,]  7.561869 27.197732
#[2,] 36.338238  5.608505
#[3,] 17.322406 13.257042
#[4,] 14.748044 25.992446
#[5,] 27.094530 28.394067
apply(coords,1,reverseGeoCode)
#[1] "Wau, South Sudan"                                                 
#[2] "Unnamed Road, Dehamcha, Algeria"                                  
#[3] "Nguigmi, Niger"                                                   
#[4] "Mellit, Sudan"                                                    
#[5] "Al Farafra - Al Wahat, Al Farafrah, New Valley Governorate, Egypt"

如果您有一个带有latlon 组件的list,则可以使用mapply

coordlist<-list(lat=coords[,1],lon=coords[,2])
#$lat
#[1]  7.561869 36.338238 17.322406 14.748044 27.094530
#$lon
#[1] 27.197732  5.608505 13.257042 25.992446 28.39406
mapply(function(x,y) reverseGeoCode(c(x,y)),coordlist$lat,coordlist$lon)
#same output as above

正如 cmets 所述,ggmap 包中的 revgeocode 函数与您的 reverseGeoCode 一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2016-08-05
    相关资源
    最近更新 更多