如何使用 BigQuery 从经纬度坐标中获取时区?

Posted

技术标签:

【中文标题】如何使用 BigQuery 从经纬度坐标中获取时区?【英文标题】:How to get the time zone from latitude and longitude coordinates with BigQuery? 【发布时间】:2021-12-09 06:13:29 【问题描述】:

鉴于纬度和经度,我如何使用 BigQuery 知道该位置的有效时区?

假设我有一个包含 100 个坐标的表格:

SELECT (RAND()-0.5)*90 as latitude, (RAND()-0.5)*180 as longitude FROM UNNEST(GENERATE_ARRAY(1, 100))
Row latitude longitude
1 -24.66121614027115 31.92125752510383
2 -17.060823106878654 30.070053747514052
3 1.5425276266633903 32.30384245018918

我搜索最简单的获取方式:

timezone
Africa/Maputo
Africa/Harare
Africa/Kampala

【问题讨论】:

你想要只使用 SQL 的解决方案吗? 【参考方案1】:

我将从上传时区多边形边界开始。

例如你可以从这里得到它们https://github.com/evansiroky/timezone-boundary-builder。该项目提供 shapefile 和 geojson 文件格式,您需要转换为 BigQuery 支持的格式之一,例如以换行符分隔的 geojson 或 CSV,然后上传到 BigQuery。开源的ogr2ogr 工具可以做到这一点,还有很多专有工具。

在 BigQuery 中获得数据后,您可以将位置与时区多边形连接起来,例如

WITH points AS (
  SELECT (RAND()-0.5)*90 as latitude, (RAND()-0.5)*180 as longitude 
  FROM UNNEST(GENERATE_ARRAY(1, 100))
)
SELECT * FROM points p CROSS JOIN time_zones tz
ON ST_Intersects(ST_GeogPoint(p.longitude, p.latitude), tz.geometry)

【讨论】:

以上是关于如何使用 BigQuery 从经纬度坐标中获取时区?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用纬度和经度坐标从某个位置获取时区?

如何使用纬度和经度坐标从某个位置获取时区?

如何使用纬度和经度坐标从某个位置获取时区?

如何使用纬度和经度坐标从某个位置获取时区?

如何从谷歌地图的经纬度坐标中获取城市名称?

反向地图投影:如何从投影坐标中获取纬度/经度坐标