geo_polygon_to_h3cells()

适用于:✅Azure 数据资源管理器Azure MonitorMicrosoft Sentinel

将多边形转换为 H3 单元。 此函数是一种有用的地理空间加入和可视化效果工具。

语法

geo_polygon_to_h3cells(多边形 [,分辨率[,半径]])

详细了解语法约定

参数

客户 类型​​ 必需 说明
polygon dynamic ✔️ 采用 GeoJSON 格式的多边形或多多边形。
resolution int 定义所请求的单元格分辨率。 支持的值范围为 [0, 15]。 如果未指定,则使用默认值 6
radius real 以米为单位的缓冲区半径。 如果未指定,则使用默认值 0

返回

具有相同分辨率的 H3 单元标记字符串(表示多边形或多重多边形)的数组。 如果半径设置为正值,则将放大多边形,使得输入多边形或多重多边形的给定半径内的所有点都包含在新计算的多边形内,新计算的多边形将转换为 H3 单元。 如果多边形、分辨率、半径无效,或者单元格计数超出限制,则查询会生成 null 结果。

注意

  • 在将坐标与可能包含这些坐标的多边形进行匹配以及将多边形与多边形匹配时,将多边形转换为 H3 单元标记可能会很有用。
  • 每个多边形的最大标记计数为 61680。
  • 多边形的边缘是直线。
  • 多边形由质心位于多边形内的单元格表示。 这意味着单元格与多边形不完全相同,但会随着分辨率的增加而越来越近。 为了确保多边形中的每个点都被单元格覆盖,可以对多边形进行缓冲。 这也确保了彼此接触的相邻多边形将具有单独的单元格,因此没有单元格将属于多个多边形。

另请参阅 geo_polygon_to_s2cells()

示例

以下示例计算近似多边形的 H3 单元。

let polygon = dynamic({"type":"Polygon","coordinates":[[[-3.659,40.553],[-3.913,40.409],[-3.729,40.273],[-3.524,40.440],[-3.659,40.553]]]});
print h3_cells = geo_polygon_to_h3cells(polygon)

输出

h3_cells
["86390cb57ffffff","86390cb0fffffff","86390ca27ffffff","86390cb87ffffff","86390cb07ffffff","86390ca2fffffff","86390ca37ffffff","86390cb17ffffff","86390cb1fffffff","86390cb8fffffff","86390cba7ffffff","86390ca07ffffff","86390cbafffffff"]

以下示例演示了由近似上述多边形的 H3 单元组成的多重多边形。 指定更高的分辨率可以提高多边形逼近度。

let polygon = dynamic({"type":"Polygon","coordinates":[[[-3.659,40.553],[-3.913,40.409],[-3.729,40.273],[-3.524,40.440],[-3.659,40.553]]]});
print h3_cells = geo_polygon_to_h3cells(polygon)
| mv-expand cell = h3_cells to typeof(string) // extract cell to a separate row
| project polygon_cell = geo_h3cell_to_polygon(cell) // convert each cell to a polygon
| project individual_polygon_coordinates = pack_array(polygon_cell.coordinates)
| summarize multipolygon_coordinates = make_list(individual_polygon_coordinates)
| project multipolygon = bag_pack("type","MultiPolygon", "coordinates", multipolygon_coordinates)

输出

multipolygon
{"type": "MultiPolygon",
"coordinates": [ ... ]}

由于多边形无效,以下示例将返回 null 结果。

let polygon = dynamic({"type":"Polygon","coordinates":[[[0,0],[1,1]]]});
print is_null = isnull(geo_polygon_to_h3cells(polygon))

输出

is_null
True