代码之家  ›  专栏  ›  技术社区  ›  Neal Barsch

从坐标大数据集(一百万个或更多坐标)获取时区的最快方法

  •  2
  • Neal Barsch  · 技术社区  · 6 年前

    在一个大型坐标数据集的文本中获取本地时区的最快方法是什么?我当前的方法工作得很好,但是我使用的“rundel/timezone”包(对于小集合来说很简单也很好)对于大集合来说相当慢。

    有没有更快的方法来完成下面的任务

      library(data.table)
    
    #REPRODUCE DATA
      data <- data.table(latitude=sample(seq(47,52,by=0.001), 1000000, replace = TRUE),
                         longitude=sample(seq(8,23,by=0.001), 1000000, replace = TRUE))
    
      ###get timezone package via rundel/timezone
      if (!require("timezone")) devtools::install_github("rundel/timezone")
      library(timezone)
    
    
    ###CURRENT SLOW METHOD 
    
    system.time(data[,timezone:=find_tz(longitude,latitude),])
           user  system elapsed 
         49.017  21.394  74.086 
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   jazzurro    6 年前

    我碰巧找到了 lutz tz_lookup_coords() . 使用此函数可以通过两种方式设置方法。一个是 method = "fast" 另一个是 method = "accurate"

    library(lutz) 
    set.seed(111)
    data <- data.table(latitude=sample(seq(47,52,by=0.001), 1000000, replace = TRUE),
                       longitude=sample(seq(8,23,by=0.001), 1000000, replace = TRUE))
    
    system.time(data[, timezone := tz_lookup_coords(lat = latitude, lon = longitude, method = "fast")])
    
    #user  system elapsed 
    #6.46    3.42    9.92 
    
    #Warning message:
    #Using 'fast' method. This can cause inaccuracies in timezones
    #near boundaries away from populated ares. Use the 'accurate'
    #method if accuracy is more important than speed. 
    
    system.time(data[, timezone := tz_lookup_coords(lat = latitude, lon = longitude, method = "accurate")])
    
    #  user  system elapsed 
    #154.44    0.18  154.93