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

问题描述

在大型坐标数据集的文本中获取本地时区的最快方法是什么?我目前的方法工作正常,但我使用的包“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 

标签: rtimezonecoordinatesgeospatial

解决方案


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 

推荐阅读