跳转到主内容
跳转到主内容

用于处理 S2 索引的函数

S2Index

S2 是一种地理索引系统,它将所有地理数据表示在一个球面上 (类似于地球仪) 。

在 S2 库中,点由 S2 索引来表示——这是一个特定的数值,用于在内部编码单位球面上的一个点,而不是采用传统的 (纬度,经度) 对。要获取以 (纬度,经度) 格式给出的点对应的 S2 点索引,请使用 geoToS2 函数。此外,你也可以使用 s2ToGeo 函数来获取与给定 S2 点索引相对应的地理坐标。

geoToS2

返回与给定坐标 (longitude, latitude) 对应的 S2 点索引。

语法

geoToS2(lon, lat)

参数

返回值

示例

SELECT geoToS2(37.79506683, 55.71290588) AS s2Index;
┌─────────────s2Index─┐
│ 4704772434919038107 │
└─────────────────────┘

s2ToGeo

返回与提供的 S2 点索引相对应的地理坐标 (longitude, latitude) (经度、纬度) 。

语法

s2ToGeo(s2index)

参数

  • s2index — S2 索引。UInt64

返回值

示例

SELECT s2ToGeo(4704772434919038107) AS s2Coodrinates;
┌─s2Coodrinates────────────────────────┐
│ (37.79506681471008,55.7129059052841) │
└──────────────────────────────────────┘

s2GetNeighbors

返回与给定的 S2 对应的 S2 邻居索引。S2 系统中的每个单元都是由四条测地线围成的四边形,因此,每个单元有 4 个邻居。

语法

s2GetNeighbors(s2index)

参数

  • s2index — S2 索引。UInt64

返回值

  • 由 4 个相邻索引值组成的数组:array[s2index1, s2index3, s2index2, s2index4]Array(UInt64)。

示例

SELECT s2GetNeighbors(5074766849661468672) AS s2Neighbors;
┌─s2Neighbors───────────────────────────────────────────────────────────────────────┐
│ [5074766987100422144,5074766712222515200,5074767536856236032,5074767261978329088] │
└───────────────────────────────────────────────────────────────────────────────────┘

s2CellsIntersect

判断提供的两个 S2 单元是否相交。

语法

s2CellsIntersect(s2index1, s2index2)

参数

  • siIndex1, s2index2 — S2 索引。UInt64

返回值

  • 1 — 如果单元相交。UInt8
  • 0 — 如果单元不相交。UInt8

示例

SELECT s2CellsIntersect(9926595209846587392, 9926594385212866560) AS intersect;
┌─intersect─┐
│         1 │
└───────────┘

s2CapContains

用于判断一个球冠是否包含某个 S2 点。球冠表示由平面截取得到的球面的一部分。它由球面上的一个点以及以度数表示的半径定义。

语法

s2CapContains(center, degrees, point)

参数

  • center — 对应于该球冠的 S2 点索引。UInt64
  • degrees — 球冠的半径 (以度为单位) 。Float64
  • point — S2 点索引。UInt64

返回值

  • 1 — 如果球冠包含该 S2 点索引。UInt8
  • 0 — 如果球冠不包含该 S2 点索引。UInt8

示例

SELECT s2CapContains(1157339245694594829, 1.0, 1157347770437378819) AS capContains;
┌─capContains─┐
│           1 │
└─────────────┘

s2CapUnion

确定能包含给定两个输入球冠的最小球冠。球冠表示被平面截下的球面部分。它由球面上的一个点和以度数表示的半径来定义。

语法

s2CapUnion(center1, radius1, center2, radius2)

参数

  • center1, center2 — 对应两个输入球冠的 S2 点索引。UInt64
  • radius1, radius2 — 两个输入球冠的半径 (单位:度) 。Float64

返回值

  • center — 对应于包含这两个输入球冠的最小球冠的中心的 S2 点索引。UInt64
  • radius — 包含这两个输入球冠的最小球冠的半径。Float64

示例

SELECT s2CapUnion(3814912406305146967, 1.0, 1157347770437378819, 1.0) AS capUnion;
┌─capUnion───────────────────────────────┐
│ (4534655147792050737,60.2088283994957) │
└────────────────────────────────────────┘

s2RectAdd

增加边界矩形的范围,使其包含给定的 S2 点。在 S2 系统中,矩形由一种名为 S2LatLngRectS2Region 类型表示,用于表示纬度-经度空间中的矩形。

语法

s2RectAdd(s2pointLow, s2pointHigh, s2Point)

参数

  • s2PointLow — 与矩形对应的 S2 点索引下界。UInt64
  • s2PointHigh — 与矩形对应的 S2 点索引上界。UInt64
  • s2Point — 需通过扩展矩形使其包含的目标 S2 点索引。UInt64

返回值

  • s2PointLow — 与扩展后矩形对应的 S2 单元 ID 下界。UInt64
  • s2PointHigh — 与扩展后矩形对应的 S2 单元 ID 上界。UInt64

示例

SELECT s2RectAdd(5178914411069187297, 5177056748191934217, 5179056748191934217) AS rectAdd;
┌─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 点。

示例

SELECT s2RectContains(5179062030687166815, 5177056748191934217, 5177914411069187297) AS rectContains;
┌─rectContains─┐
│            0 │
└──────────────┘

s2RectUnion

返回包含当前矩形与给定矩形并集的最小矩形。在 S2 系统中,矩形由一种名为 S2LatLngRectS2Region 类型表示,用于表示纬度-经度空间中的矩形。

语法

s2RectUnion(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)

参数

  • s2Rect1PointLow, s2Rect1PointHi — 对应第一个矩形的 S2 点索引下界和上界。UInt64
  • s2Rect2PointLow, s2Rect2PointHi — 对应第二个矩形的 S2 点索引下界和上界。UInt64

返回值

  • s2UnionRect2PointLow — 对应并集矩形的 S2 单元 ID 下界。UInt64
  • s2UnionRect2PointHi — 对应并集矩形的 S2 单元 ID 上界。UInt64

示例

SELECT s2RectUnion(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectUnion;
┌─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

示例

SELECT s2RectIntersection(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectIntersection;
┌─rectIntersection──────────────────────────┐
│ (5178914411069187297,5177056748191934217) │
└───────────────────────────────────────────┘