geo_line_buffer()

计算包含地球上的输入线或多线的给定半径内所有点的多边形或多多边形。

语法

geo_line_buffer(lineString,radius,tolerance)

详细了解语法约定

参数

客户 类型​​ 必需 说明
lineString dynamic GeoJSON 格式 的 LineString 或 MultiLineString。
radius real 以米为单位的缓冲区半径。 有效值必须为正。
tolerance real 定义以米为单位的公差,用于确定多边形可以偏离理想半径的程度。 如果未指定,则使用默认值 10。 公差应不低于半径的 0.0001%。 指定大于半径的公差会将公差降低到半径以下的最大可能值。

返回

围绕输入 LineString 或 MultiLineString 的多边形或多多边形。 如果坐标、半径或公差无效,则查询会生成 null 结果。

注意

  • 对按照 WGS-84 坐标参考系统表示的地理空间坐标进行解释。
  • 用于测量地球上的距离的大地基准是一个球体。
  • 如果输入直线边缘是直笛卡尔线,请考虑使用 geo_line_densify() 以便将平面边缘转换为测地线。
  • 线的端点是圆形的。
  • 线的两侧都经过缓冲。

LineString 定义和约束

dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})

dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})

  • LineString 坐标数组必须至少包含两个条目。
  • 如果 longitude 是 [-180, +180] 范围内的实数,而 latitude 是 [-90, +90] 范围内的实数,则坐标 [longitude,latitude] 必须有效。
  • 边缘长度必须小于 180 度。 将选择两个顶点之间的最短边缘。

示例

以下查询计算围绕线的多边形,其半径为 4 米,公差为 0.1 米

let line = dynamic({"type":"LineString","coordinates":[[-80.66634997047466,24.894526340592122],[-80.67373241820246,24.890808090321286]]});
print buffer = geo_line_buffer(line, 4, 0.1)
缓冲区
{"type": "Polygon", "coordinates": [ ... ]}

以下查询计算围绕每条线的缓冲区并统一结果

datatable(line:dynamic)
[
    dynamic({"type":"LineString","coordinates":[[14.429214068940496,50.10043066548272],[14.431184174126173,50.10046525983731]]}),
    dynamic({"type":"LineString","coordinates":[[14.43030222687753,50.100780677801936],[14.4303847111523,50.10020274910934]]})
]
| project buffer = geo_line_buffer(line, 2, 0.1)
| summarize polygons = make_list(buffer)
| project result = geo_union_polygons_array(polygons)
result
{"type": "Polygon","coordinates": [ ... ]}

由于线无效,以下示例将返回 true。

print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString"}), 5))
缓冲区
True

由于半径无效,以下示例将返回 true。

print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString","coordinates":[[0,0],[1,1]]}), 0))
缓冲区
True