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

时间:2018-10-20 01:52:26

标签: r timezone coordinates geospatial

在大型坐标数据集中的文本中获取本地时区的最快方法是什么?我当前的方法运行良好,但是我使用的“ 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 个答案:

答案 0 :(得分:2)

看到这个问题时,我偶然发现了lutz软件包。看来此套件适用于OP。我认为在这里留下笔记会很好。程序包中有一个名为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