【问题标题】:BigQuery Geo functions - How to compute the shortest distance to the polygon perimeterBigQuery 地理函数 - 如何计算到多边形周长的最短距离
【发布时间】:2020-08-04 18:27:08
【问题描述】:

我想使用内置的 BigQuery Geo 函数计算从下图中的黄色点到多边形边界的最短距离。

我自己找不到任何东西。

这是构建示例的查询。

WITH objects AS(
  SELECT 'POLYGON((-84.3043408314983 33.78004925, -84.3058929975152 33.7780287948446, -84.3026549053438 33.77962155, -84.3018234603607 33.7798783, -84.3041030408163 33.7785105714286, -84.2983655895464 33.7814847396304, -84.2869801170094 33.7772419185107, -84.2842584693878 33.7827876938775, -84.2863881748169 33.7848439284835, -84.2963746470588 33.7897689411765, -84.2979002513655 33.790508814658, -84.2978883265306 33.7851126734694, -84.300035153059 33.78268675, -84.3043408314983 33.78004925))' wkt_string
  UNION ALL
  SELECT 'POINT(-84.2998716702097 33.7796025711153)' wkt_string

)

SELECT ST_GEOGFROMTEXT(wkt_string) geo
FROM objects    

【问题讨论】:

    标签: google-bigquery gis


    【解决方案1】:

    这是我一直在寻找的功能:

    ST_CLOSESTPOINT(geography_1, geography_2[, use_spheroid])。

    【讨论】:

      【解决方案2】:

      使用ST_Distance 函数计算形状之间的最短距离:

      WITH objects AS(
        SELECT 
        'POLYGON((-84.3043408314983 33.78004925, -84.3058929975152 33.7780287948446, -84.3026549053438 33.77962155, -84.3018234603607 33.7798783, -84.3041030408163 33.7785105714286, -84.2983655895464 33.7814847396304, -84.2869801170094 33.7772419185107, -84.2842584693878 33.7827876938775, -84.2863881748169 33.7848439284835, -84.2963746470588 33.7897689411765, -84.2979002513655 33.790508814658, -84.2978883265306 33.7851126734694, -84.300035153059 33.78268675, -84.3043408314983 33.78004925))' 
         AS poly,
        'POINT(-84.2998716702097 33.7796025711153)' AS point
      )
      SELECT ST_Distance(ST_GEOGFROMTEXT(poly), ST_GEOGFROMTEXT(point))
      FROM objects    
      

      一个警告 - 它计算点和多边形之间的距离,所以如果点在多边形内部,则距离为 0。如果你真的想要到多边形的距离 boundary , 将ST_Boundary 添加到组合中:

      WITH objects AS(
         ...
      )
      SELECT ST_Distance(ST_Boundary(ST_GEOGFROMTEXT(poly)), ST_GEOGFROMTEXT(point))
      FROM objects    
      

      【讨论】:

      • 嗨迈克尔,要获得最接近多边形边界的点 ST_CLOSESTPOINT() 很好。尽管如此,我还是会尝试 ST_Boundary(),因为当兴趣点在多边形内时,我遇到了距离 0 的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 2020-01-24
      • 2018-06-25
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      相关资源
      最近更新 更多