【问题标题】:How to get the time zone from latitude and longitude coordinates with BigQuery?如何使用 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 的解决方案吗?

标签: google-cloud-platform google-bigquery timestamp timezone coordinates


【解决方案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)

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 2019-09-08
    相关资源
    最近更新 更多