跳转到主要内容

S2Index

S2 是一种地理索引系统,其中所有地理数据都表示在球体上 (类似地球仪) 。 在 S2 库中,点以 S2 Index 的形式表示——它是一个特定的数字,在内部对单位球面上的某个点进行编码,而不是使用传统的 (纬度、经度) 坐标对。要获取以 (纬度、经度) 格式指定的点的 S2 点索引,请使用 geoToS2 函数。此外,你也可以使用 s2ToGeo 函数来获取与指定 S2 点索引 对应的地理坐标。

geoToS2

返回与所提供坐标 (longitude, latitude) 相对应的 S2 点索引。 语法
geoToS2(lon, lat)
参数 返回值 示例
Query
SELECT geoToS2(37.79506683, 55.71290588) AS s2Index;
Response
┌─────────────s2Index─┐
│ 4704772434919038107 │
└─────────────────────┘

s2ToGeo

返回与给定的 S2 点索引对应的地理坐标 (longitude, latitude) 语法
s2ToGeo(s2index)
参数
  • s2index — S2 Index。UInt64
返回值 示例
Query
SELECT s2ToGeo(4704772434919038107) AS s2Coodrinates;
Response
┌─s2Coodrinates────────────────────────┐
│ (37.79506681471008,55.7129059052841) │
└──────────────────────────────────────┘

s2GetNeighbors

返回与给定 S2 相邻的 S2 索引。S2 系统中的每个单元都是由四条测地线围成的四边形,因此每个单元都有 4 个相邻单元。 语法
s2GetNeighbors(s2index)
参数
  • s2index — S2 索引。UInt64
返回值
  • 包含 4 个相邻索引的数组:array[s2index1, s2index3, s2index2, s2index4]Array(UInt64)。
示例
Query
SELECT s2GetNeighbors(5074766849661468672) AS s2Neighbors;
Response
┌─s2Neighbors───────────────────────────────────────────────────────────────────────┐
│ [5074766987100422144,5074766712222515200,5074767536856236032,5074767261978329088] │
└───────────────────────────────────────────────────────────────────────────────────┘

s2CellsIntersect

判断给定的两个 S2 单元是否相交。 语法
s2CellsIntersect(s2index1, s2index2)
参数
  • siIndex1, s2index2 — S2 Index。UInt64
返回值
  • 1 — 如果这些单元相交,则返回 1UInt8
  • 0 — 如果这些单元不相交,则返回 0UInt8
示例
Query
SELECT s2CellsIntersect(9926595209846587392, 9926594385212866560) AS intersect;
Response
┌─intersect─┐
│         1 │
└───────────┘

s2CapContains

判断球冠是否包含某个 S2 点。球冠表示被平面截取出的球面区域。它由球面上的一个点和一个以度为单位的半径定义。 语法
s2CapContains(center, degrees, point)
参数
  • center — 对应于该球冠的 S2 点索引。UInt64
  • degrees — 球冠的半径 (以度为单位) 。Float64
  • point — S2 点索引。UInt64
返回值
  • 1 — 如果该球冠包含该 S2 点索引。UInt8
  • 0 — 如果该球冠不包含该 S2 点索引。UInt8
示例
Query
SELECT s2CapContains(1157339245694594829, 1.0, 1157347770437378819) AS capContains;
Response
┌─capContains─┐
│           1 │
└─────────────┘

s2CapUnion

确定可包含给定两个输入球冠的最小球冠。球冠表示被平面切出的球体一部分。它由球面上的一个点和以度为单位的半径定义。 语法
s2CapUnion(center1, radius1, center2, radius2)
参数
  • center1, center2 — 与两个输入球冠对应的 S2 点索引。UInt64
  • radius1, radius2 — 两个输入球冠的半径 (以度为单位) 。Float64
返回值
  • center — 对应于包含这两个输入球冠的最小球冠中心的 S2 点索引。UInt64
  • radius — 包含这两个输入球冠的最小球冠的半径。Float64
示例
Query
SELECT s2CapUnion(3814912406305146967, 1.0, 1157347770437378819, 1.0) AS capUnion;
Response
┌─capUnion───────────────────────────────┐
│ (4534655147792050737,60.2088283994957) │
└────────────────────────────────────────┘

s2RectAdd

增大边界矩形的范围,使其包含给定的 S2 点。在 S2 系统中,矩形由一种名为 S2LatLngRect 的 S2Region 类型来表示,它表示纬经度空间中的一个矩形。 语法
s2RectAdd(s2pointLow, s2pointHigh, s2Point)
参数
  • s2PointLow — 与该矩形对应的较低 S2 点索引。UInt64
  • s2PointHigh — 与该矩形对应的较高 S2 点索引。UInt64
  • s2Point — 目标 S2 点索引,边界矩形应扩展以将其包含在内。UInt64
返回值
  • s2PointLow — 与扩展后矩形对应的较低 S2 单元 ID。UInt64
  • s2PointHigh — 与扩展后矩形对应的较高 S2 单元 ID。UInt64
示例
Query
SELECT s2RectAdd(5178914411069187297, 5177056748191934217, 5179056748191934217) AS rectAdd;
Response
┌─rectAdd───────────────────────────────────┐
│ (5179062030687166815,5177056748191934217) │
└───────────────────────────────────────────┘

s2RectContains

判断给定矩形是否包含某个 S2 点。在 S2 系统中,矩形由一种称为 S2LatLngRect 的 S2Region 类型表示,用于表示纬度-经度空间中的矩形。 语法
s2RectContains(s2PointLow, s2PointHi, s2Point)
参数
  • s2PointLow — 与该矩形对应的较小 S2 点索引。UInt64
  • s2PointHigh — 与该矩形对应的较大 S2 点索引。UInt64
  • s2Point — 目标 S2 点索引。UInt64
返回值
  • 1 — 如果该矩形包含给定的 S2 点。
  • 0 — 如果该矩形不包含给定的 S2 点。
示例
Query
SELECT s2RectContains(5179062030687166815, 5177056748191934217, 5177914411069187297) AS rectContains;
Response
┌─rectContains─┐
│            0 │
└──────────────┘

s2RectUnion

返回同时包含此矩形与给定矩形并集的最小矩形。在 S2 系统中,矩形由一种名为 S2LatLngRect 的 S2Region 类型表示,用于表示经纬度空间中的矩形。 语法
s2RectUnion(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)
参数
  • s2Rect1PointLow, s2Rect1PointHi — 对应第一个矩形的低位和高位 S2 点索引值。UInt64
  • s2Rect2PointLow, s2Rect2PointHi — 对应第二个矩形的低位和高位 S2 点索引值。UInt64
返回值
  • s2UnionRect2PointLow — 对应并集矩形的低位 S2 单元 ID。UInt64
  • s2UnionRect2PointHi — 对应并集矩形的高位 S2 单元 ID。UInt64
示例
Query
SELECT s2RectUnion(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectUnion;
Response
┌─rectUnion─────────────────────────────────┐
│ (5179062030687166815,5177056748191934217) │
└───────────────────────────────────────────┘

s2RectIntersection

返回同时包含当前矩形与给定矩形交集的最小矩形。在 S2 系统中,矩形由一种称为 S2LatLngRect 的 S2Region 类型表示,它表示纬度-经度空间中的矩形。 语法
s2RectIntersection(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)
参数
  • s2Rect1PointLow, s2Rect1PointHi — 分别对应第一个矩形的低位和高位 S2 点索引。UInt64
  • s2Rect2PointLow, s2Rect2PointHi — 分别对应第二个矩形的低位和高位 S2 点索引。UInt64
返回值
  • s2UnionRect2PointLow — 与包含给定矩形交集的矩形对应的低位 S2 单元 ID。UInt64
  • s2UnionRect2PointHi — 与包含给定矩形交集的矩形对应的高位 S2 单元 ID。UInt64
示例
Query
SELECT s2RectIntersection(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectIntersection;
Response
┌─rectIntersection──────────────────────────┐
│ (5178914411069187297,5177056748191934217) │
└───────────────────────────────────────────┘
最后修改于 2026年6月10日