在 GIS 系统里,我们可能会遇到如下的场景,给定一个坐标点,计算其到哪条边最近。而生活中对应的实例是:根据你的 GPS 位置信号,找到离你最近的一条公路是哪个。
在 google s2 的库中,提供了如下类,用来进行该类型的空间索引:S2ClosestEdgeQuery
。
首先我们将已有的 geospatial objects 存到一个 index 中,也就是对这些 objects 建立了一个空间索引,我们暂且称这个索引为 index
。
之后我们给定一个查询目标,Target
,从 index
里面查找到在 Target
周围,符合我们要求的 spatial objects,这就是 query 以后返回的 results
。
下面看一段简单的查询代码,给定 Target 点,找到距离它最近的边是哪些:
1 |
|
可以从下面的示例图中看出来:
当然,s2 的该类不仅仅只能计算点到哪条边最近,抽象一下它能够实现的功能为:
- 计算距离给定 Target(可以是 point,edge,或者复杂的 polygon)最近的 spatial objects (这些 object 也可以是 point, edge, polygon)是哪些。
- 给定一个范围 r,是否在距离 Target 为 r 的周围,有 spatial object 存在。
具体的例子可以到下面去查阅:
http://s2geometry.io/devguide/s2closestedgequery
https://github.com/google/s2geometry/blob/master/src/s2/s2closest_edge_query_test.cc