跳到内容

ateucher/lutz公司

存储库文件导航

R-CMD检查 覆盖率状态 CRAN状态 CRAN下载

查找时区

查找坐标的时区

输入纬度和经度值或sf/sfcPOINT对象并获取回到它们存在的时区。实现了两种方法。一个非常快,并将Rcpp与来自(https://github.com/darkskyapp/tz-lookup-oss/). 然而,速度来了以准确性为代价-靠近时区边界远离人口中心有可能返回错误的时区。

另一种方法速度较慢但更准确-它使用sf包来与详细的时区地图相交在这里.

时区实用程序函数

卢茨还包含几个实用函数,用于帮助了解并可视化时区,例如世界时间列表分区,包括有关夏令时及其与UTC的偏移量。您还可以绘制时区以可视化UTC当夏令时生效时,在一年内进行补偿。

安装

您可以使用以下工具从CRAN安装lutz:

安装.包(卢茨)

或者您可以通过以下方式从github安装开发版本:

#install.packages(“devtools”)
开发工具::安装github(ateucher/lutz公司)

示例

此包中有两个函数用于查找的时区协调:tz_lookup()两者都适用平方英尺/平方英尺空间点对象,以及tz查找单词用于查找纵向/纵向成对。使用方法参数来选择“快速”“准确”方法。

带坐标。它们必须是以十进制度数表示的纬度/经度:

图书馆(卢茨)tz查找单词(49.5,-123.5,方法 = 快速的)#>[1]“美洲/温哥华”tz查找单词(49.5,-123.5,方法 = 精确的)#>[1]“美洲/温哥华”tz查找单词(纬度 =c(c)(48.9,38.5,63.1,-25),离子 =c(c)(-123.5,-110.2,-95,130))#>[1]“美国/温哥华”“美国/丹佛”“美国/Rankin_Inlet”
#>[4]“澳大利亚/达尔文”

使用平方英尺物体:

图书馆(平方英尺)图书馆(ggplot2)#这需要ggplot2的开发版本

#从包含的state.center数据集创建sf对象:
pts(点) <-重叠(seq_along(状态.中心$x个),功能() {st点(c(状态中心$x个[],状态.中心$[]))})状态中心sf <-st_sf(st_sfc(pts(点)))#使用tz_lookup_sf查找时区
状态中心.sf$tz(赫兹) <-tz_查找(状态中心.sf)状态中心.sf$tz(赫兹) <-tz_查找(状态中心.sf,方法 = 精确的)ggplot()+地理msf(数据 = 状态中心.sf,aes(颜色 = tz(赫兹)))+主题_最小()+坐标_sf(资料 = )

使用空间点物体:

图书馆(服务提供商)状态中心sp <-作为(状态中心.sf,空间)状态中心sp$tz(赫兹) <-tz_查找(状态中心sp)ggplot(cbind(作为.data.frame(坐标(状态中心sp)),tz(赫兹) = 状态中心sp$tz(赫兹)), 原子发射光谱(x个 = 坐标.x1, = 坐标.x2,颜色 = tz(赫兹)))+地理点()+坐标_固定()+主题_最小()

请注意,世界上有些地区的单个点可以降落在两个不同的重叠时区。这个“准确”方法包括这些,然而,在“快速”不包括重叠时区(至少对于现在).

我们可以将这两种方法的精度与高分辨率时间进行比较区域地图由提供https://github.com/evansiroky/timezone-boundary-builder。这是由使用的地图卢茨对于“准确”方法,但在卢茨简化了约80%,使其足够小,可以放入包装中。

##获取全时区geojsonhttps://github.com/evansiroky/timezone-boundary-builder下载.file(https://github.com/evansiroky/timezone-boundary-builder/releases/download/2019a/timezones-with-oceans.geojson.zip,目标文件 = tz.zip公司)解压缩(tz.zip公司,外部目录 = 数据草稿/分发/)
图书馆(卢茨)图书馆(平方英尺)图书馆(呜呜声)图书馆(数字播放器)tz_满 <-读取sf(数据原始/dist/componed-with-oceans.json)#创建一个包含500000 lat/long对的数据帧:设置种子(1)n个 <- 500000
全部 <- 数据帧(身份证件 =序列(n个),纬度 =运行(n个,-90,90),离子 =运行(n个,-180,180))全部(秒) <-st_as_sf(全部,坐标 =c(c)(离子,纬度),阴极射线管 = 4326)#用完整的高分辨率时区地图覆盖这些点:
参考_ ll_tz <- 平方英尺::st_join(加入)(全部(秒),tz_满)#合并那些有重叠时区的
参考_ ll_tz <- 参考_ ll_tz%>% st_set_geometry(设置几何体)(无效的) %>% 分组方式(_B)(身份证件) %>% 总结(tzid公司 =糊状物(tzid公司,崩溃 = ;))#使用“快速”和“准确”方法运行tzlookup,并与
#时区通过高分辨率地图进行查看:
测验 <-map_df(c(快速的,精确的),~{时间 <-系统时间(测试_ ll_tz <-tz_锁定(ll_sf公司,方法 = .x个,警告 = 错误的))comp公司 <- 参考_ ll_tz$tzid公司 == 测试_ ll_tz
  比赛 <-总和(comp公司,na.rm(毫米) = 真的)不匹配 <-总和(comp公司,na.rm(毫米) = 真的)列表(方法 = .x个,时间 = 时间[逝去],比赛 = 比赛,不匹配 = 不匹配,精确 = 比赛 /(比赛 + 不匹配),参考名称(_N) =总额(is.na(参考_ ll_tz$tzid公司)),娱乐(_N) =总额(is.na(测试_ ll_tz)))})
针织物::卡布尔的(测验)

时区实用程序函数

tz_plot()

tz_plot(tz_pot)(美国/温哥华)

tz_offset()

#Date对象tz_ offset(系统日期(),非洲/阿尔及尔)#>tz_name日期时区is_dst utc_offset_h
#>1非洲/阿尔及尔2023-10-17 CET FALSE 1


#类似日期的字符串tz_偏移(2017-03-01,tz(赫兹) = 新加坡)#>tz_name日期时区is_dst utc_offset_h
#>1新加坡2017-03-01+08假8


#POSIXct日期时间对象tz_offset(系统时间())#>警告:您提供的POSIXct类对象没有时区
#>属性,并且未在“tz”参数中指定一个。默认为当前
#>(美国/温哥华)。
#>tz_name日期时区is_dst utc_offset_h
#>1美洲/温哥华2023-10-17 12:11:11 PDT TRUE-7

tz_list()

tz_list()%>% 头部(20) %>%针织物::卡布尔()
tz名称 是(_D) utc_offset_h
1 非洲/阿比让 格林威治标准时间 错误的 0
2 非洲/阿克拉 格林威治标准时间 错误的 0
非洲/亚的斯亚贝巴 EAT(吃) 错误的
4 非洲/阿尔及尔 大学英语等级考试 错误的 1
5 非洲/阿斯马拉 EAT(吃) 错误的
6 非洲/阿斯梅拉 EAT(吃) 错误的
7 非洲/巴马科 格林威治标准时间 错误的 0
8 非洲/班吉 WAT公司 错误的 1
9 非洲/班珠尔 格林威治标准时间 错误的 0
10 非洲/比绍 格林威治标准时间 错误的 0
11 非洲/布兰太尔 CAT公司 错误的 2
12 非洲/布拉柴维尔 瓦特 错误的 1
13 非洲/布琼布拉 CAT公司 错误的 2
14 非洲/开罗 EET公司 错误的 2
16 非洲/开罗 EEST公司 真的
17 非洲/卡萨布兰卡 +01 真的 1
18 非洲/卡萨布兰卡 +00 错误的 0
19 非洲/休达 大学英语等级考试 错误的 1
20 非洲/休达 CEST公司 真的 2
21 非洲/科纳克里 格林威治标准时间 错误的 0