如何使用 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 从经纬度坐标中获取时区?的主要内容,如果未能解决你的问题,请参考以下文章