如何通过给定坐标获取NYC出租车区域?求BigQuery实现示例
通过经纬度匹配NYC Taxi Zone的BigQuery示例
单坐标查询
假设你已经将NYC Taxi Zones数据集导入到BigQuery(表名示例:your-project.your-dataset.taxi_zones),用以下SQL就能根据给定经纬度找到对应的区域:
SELECT zone, borough, location_id FROM `your-project.your-dataset.taxi_zones` WHERE ST_CONTAINS( ST_GEOGFROMTEXT(shape), -- 把数据里的multipolygon文本转成地理对象 ST_GEOGPOINT(-73.9857, 40.7484) -- 替换成你的目标经度、纬度(注意先经度后纬度) )
批量坐标查询
如果要一次性匹配多个坐标,可以用临时表来批量处理:
WITH input_coords AS ( SELECT ST_GEOGPOINT(-73.9857, 40.7484) AS point, 'Times Square' AS location_name UNION ALL SELECT ST_GEOGPOINT(-73.9712, 40.7505) AS point, 'Grand Central' AS location_name ) SELECT ic.location_name, tz.zone, tz.borough, tz.location_id FROM input_coords ic LEFT JOIN `your-project.your-dataset.taxi_zones` tz ON ST_CONTAINS(ST_GEOGFROMTEXT(tz.shape), ic.point)
核心逻辑说明
ST_CONTAINS:BigQuery的空间判断函数,用来检查multipolygon类型的区域是否包含目标点ST_GEOGFROMTEXT:将数据集中存储的WKT格式多边形文本转换为BigQuery可处理的地理对象ST_GEOGPOINT:构建点地理对象,参数顺序必须是经度在前,纬度在后,这是很多人容易踩的坑
内容的提问来源于stack exchange,提问作者Hyunuk
相关产品推荐
相关产品推荐

