检查坐标是否在范围内-BigQuery GIS

时间:2018-12-16 12:56:36

标签: sql google-bigquery gis

我正在查看Google BigQuery上免费提供的太阳能潜力数据集,该数据集可在以下位置找到:https://bigquery.cloud.google.com/table/bigquery-public-data:sunroof_solar.solar_potential_by_censustract?pli=1&tab=schema

该表上的每个记录都有以下边框定义: lat_max-该区域的最大纬度 lat_min-该区域的最小纬度 lng_max-该区域的最大经度 lng_min-该区域的最小经度

现在我有了一个坐标(纬度/经度对),我想查询一下该坐标是否在上述范围内。如何使用BQ标准SQL?

我在这里看到过地理功能:https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions 但是我仍然不确定如何编写此查询。

谢谢!

2 个答案:

答案 0 :(得分:2)

假设点仅是数字的经度和纬度,为什么不能仅进行标准的数字比较?

注意:如果没有Google帐户,第一个链接将无法工作,因此我看不到数据。 但是,如果您想成为空间对象,建议您使用现有的边界坐标,然后使用ST_MAKEPOLYGONST_GEOGFROMGEOJSON或{ {1}}。然后使用您要测试的ST_GEOGFROMTEXT坐标来创建一个点。

现在您有两个地理区域,可以根据需要的结果使用ST_MAKEPOINTST_INTERSECTION对其进行比较。 如果您想花哨并查看距边界有多远(我想这意味着更有效?),可以使用ST_DISJOINT

答案 1 :(得分:1)

同意乔纳森(Jonathan)的意见,只是检查每个纬度/经度值是否在界限内是实现这一点的最简单方法(除非围绕子午线问题,但很可能您可以忽略它们)。

如果您确实想使用Geography对象,则可以使用以下方法为这些矩形构造Geography对象:

ST_MakePolygon(ST_MakeLine(
  [ST_GeogPoint(lon_min, lat_min), ST_GeogPoint(lon_max, lat_min), 
   ST_GeogPoint(lon_max, lat_max), ST_GeogPoint(lon_min, lat_max), 
   ST_GeogPoint(lon_min, lat_min)]))

然后使用

检查点是否在特定矩形内
ST_Intersects(ST_GeogPoint(lon, lat), <polygon-above>)

但是它可能会变慢,并且不会为这种特殊情况提供任何好处。