Google S2 library的使用(C++)
https://smithnote.com/programing/google_s2/ 关于google s2算法的详细的介绍有一篇很好的中文博客,可以浏览《高效的多维空间点索引算法》。这里就只介绍google s2库的具体使用 安装 直接源码编译安装,步骤如下 预先了解的概念 地球(S2Earth): 地球的表示类,它提供了一系列对于S2Point, S2Latlng等相关的操作,例如两个坐标点之间的 距离,将距离装换为S2ChorAngle,方便其他接口调用 点(S2Point): 三维空间中的某个点的表示class, 由地球上的经纬度转换成实际的三维坐标而来 角度(S1Angle): 表示一维角度,具体的理解就如同经纬度中的其中一个维度,如经度或纬度 弦角(S1ChordAngle): 相较于一维角度,弦角是球体上两个点分别与球心连线的夹角,取值范围[0, 180] 坐标(S2LatLng): 地球经纬度坐标的表示class, 其内部由两个S1Angle表示 区域(S2Region): 地球上的某个区域的base class表示, 实际的区域都继承于它 矩形区域(S2LatLngRect):由两个坐标或者两个点初始化。具体就是由一个最小经纬度p1(矩形左下角的坐标) 和最大经纬度坐标p2(矩形右上角的坐标)初始化,所以要保证-90 <=p1.lat <= p2.lat <= 90,而经度则无要求 圆形区域(S2Cap):由一个圆心坐标和一段半径距离初始化(也可以是一个角度), 在球体上就是一个帽盖形状 闭环多边形(S2Loop): 闭环多边形, 由给定一系列坐标点的列表的顺序形成一个闭环,也就是说最后的连线的终点就是起点, 这个要注意的是多边形内部是定义在连线方向的左边 线形区域(S2Polyline):由给定的点连成的直线组成 多个闭环区域(S2Polygon): 由多个S2Loop组成 点索引(S2PointIndex): 点的索引实现类,是个模板类,是为了方便的添加每个point的额外信息。 它主要跟他相关的查询接口类来配合实现对索引的操作。 形状(S2Shape): 并不是具体指额某个形状,它表示同一维度的几何形集合,例如point的集合,闭环多边形的集合, 线形区域等, 那些几何形都实现了S2Shape的接口, 例如S2Loop::Shape, S2Polygon::Shape, S2Polyline::Shape等 形状索引(S2ShapeIndex): shape索引抽象class, 它跟一系列其他相关的类配合来实现对索引的操作 …
