除了EST中的时间戳,我还有大约900万条经纬度记录。 我想使用纬度和经度生成适当的区域时区,然后从中调整相关时区的所有这些时间。

我尝试过使用地名

data_raw$tz <- mapply(GNtimezone, data$lat,data$lon)

但是,这将返回以下错误:

Error in getJson("timezoneJSON", list(lat = lat, lng = lng, radius = 0)) : 
error code 13 from server: ERROR: canceling statement due to statement timeout

我曾尝试使用所记载的方法这篇文章

data$tz_url <- sprintf("https://maps.googleapis.com/maps/api/timezone/%s?location=%s,%s&timestamp=%d&sensor=%s", 
              "xml", 
              data$lat, 
              data$lon, 
              as.numeric(data$time), 
              "false")

for(i in 1:100){
  data$tz[i] <- xmlParse(readLines(data$tz_url[i]), isURL=TRUE)[["string(//time_zone_name)"]]
}  

通过这种方法,我可以获取XML数据的URL。 但是,当我尝试在for循环中提取XML数据并将时区附加到数据帧时,它并不能对所有记录执行此操作……(实际上,一次只能记录10条记录)。

有谁知道相对其他的方法或软件包可以相对快速地获取大约900万条记录的三个字符的时区(即EST)? 非常感谢您的帮助。 或者更好的是,如果您对我上面使用的代码为什么不起作用有任何想法,我也将不胜感激。

===============>>#1 票数:2

对于转换纬度和经度时区的方法列表,请参阅这篇文章 这些机制将返回IANA / Olson时区标识符,例如America/Los_Angeles

但是,您当然不希望进行900万个单独的HTTP调用。 您应尝试将记录分组到不同的位置,以最大程度地减少查找次数。 如果它们确实是随机的,那么您将仍然有很多位置,因此您应该考虑上一篇文章中描述的脱机机制(即,将tz_world shapefile与某种地理空间查找机制配合使用 )。

获得位置的IANA / Olson时区标识符后,便可以将R的时区功能(如as.POSIXctformat等)与相应的每个时间戳一起使用以获得缩写。

但是,一定要认识到时区缩写本身可能有点模棱两可 它们对于提高人类可读性很有用,但没有其他用途。

===============>>#2 票数:1

我已经编写了googleway包来访问google maps API。 您需要一个有效的API密钥(并且Google要处理900万次调用,您必须付费,因为它们的免费密钥只能覆盖2500个)

library(googleway)

key <- "your_api_key"

google_timezone(location = c(-37, 144),
                key = key)


$dstOffset
[1] 0

$rawOffset
[1] 36000

$status
[1] "OK"

$timeZoneId
[1] "Australia/Hobart"

$timeZoneName
[1] "Australian Eastern Standard Time"

  ask by A Trask translate from so

未解决问题?本站智能推荐: