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



我正在谷歌BigQuery上查看免费提供的太阳能潜力数据集,可以在这里找到:https://bigquery.cloud.google.com/table/bigquery-public-data:sunroof_solar.solar_potential_by_censustract?pli=1&tab=模式

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

现在我有一个坐标(lat/lng对(,我想查询该坐标是否在上述范围内。如何使用BQ标准SQL实现这一点?

我在这里看到了Geo函数:https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions但我仍然不确定如何编写这个查询。

谢谢!

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

注意:第一个链接没有谷歌帐户就不起作用,所以我看不到数据。但是,如果你想成为空间坐标,我建议你需要使用现有的边界坐标,并使用ST_MAKEPOLYGONST_GEOGFROMGEOJSONST_GEOGFROMTEXT之一将其转化为多边形。然后使用想要测试ST_MAKEPOINT的坐标创建一个点。

现在您有两个地理位置,您可以使用ST_INTERSECTIONST_DISJOINT对它们进行比较,具体取决于您想要的结果。如果你想变漂亮,看看你离边界有多远(我想这意味着更高效?(,你可以使用ST_DISTANCE

同意Jonathan的观点,只需检查每个lat/lon值是否在界限内是实现这一点的最简单方法(除非反细菌有任何问题,但很可能你可以忽略它们(。

如果你真的想使用Geography对象,你可以使用为这些矩形构建Geographic对象

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>)

但它可能会更慢,不会为这种特殊情况带来任何好处。


两个更新:

  • 表似乎有了一个新列center_point,它已经是地理类型的了。现在使用它更有意义了
  • BigQuery得到了新的函数CCD_ 9

这两个更新使现在使用地理功能变得合理:

...
WHERE ST_INTERSECTSBOX(center_point, lng1, lat1, lng2, lat2)

这可能比通过四个条件进行过滤更快。

最新更新