你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

geo_polygon_to_h3cells ()

将多边形转换为 H3 单元格。 此函数是一个有用的地理空间联接和可视化工具。

语法

geo_polygon_to_h3cells(polygon [,resolution[,radius]])

详细了解语法约定

参数

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

返回

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

注意

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

Seel 还 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