【问题标题】:Using latitude and longitude to generate timezone使用经纬度生成时区
【发布时间】:2016-05-24 18:04:09
【问题描述】:

除了 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

我尝试使用this post中描述的方法。

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)?非常感谢您的帮助。或者更好的是,如果您对我上面使用的代码为什么不起作用有任何想法,我也将不胜感激。

【问题讨论】:

  • 如果您正在寻找一个通用时区,您是否考虑从经度计算它? 24小时360度。根据您的需要,它可能足够接近。

标签: r xml google-maps timezone


【解决方案1】:

有关将经纬度转换为时区的方法列表,请参阅this post。这些机制将返回 IANA/Olson 时区标识符,例如 America/Los_Angeles

但是,您当然不想进行 900 万次单独的 HTTP 调用。您应该尝试将记录分组到不同的位置,以尽量减少查找次数。如果它们真的是随机的,那么你仍然会有大量的位置,所以你应该考虑上一篇文章中描述的离线机制(即使用tz_world shapefile 和某种geospatial lookup mechanism)。

获得该位置的 IANA/Olson 时区标识符后,您就可以使用 R 的时区功能(as.POSIXctformat 等)和每个相应的时间戳来获取缩写。

但是,请注意时区缩写本身can be somewhat ambiguous。它们对人类可读性很有用,但在其他方面没有多大用处。

【讨论】:

  • 所以我想 R 中的 tz_world 没有任何想法?我看过你的另一篇文章,但没有关于在 R 中使用 shapefile 的内容。
  • 我还没见过。并不意味着它不在某个地方。您仍然可以使用该技术,您只需要弄清楚如何使用 R 地理空间库之一,例如 rgdal。
【解决方案2】:

我已经编写了包googleway 来访问谷歌地图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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 2012-09-16
    • 2014-06-18
    • 2012-07-09
    相关资源
    最近更新 更多