【发布时间】:2014-02-07 19:30:06
【问题描述】:
使用经度和纬度将地图划分为大小可变的区域。
为简单起见,让我们将地图视为笛卡尔平面,将经度和纬度视为 x,y 坐标。
区域总是一个矩形。例如,一个区域可以表示为 x∈(0,3],y∈(30,50] 笛卡尔平面的范围是有限的,但非常大。
那么,当给定一个x,y坐标时,我们如何识别该坐标所属的区域呢?
例如,当我们有一个 x,y 坐标 (2, 36) 时,我们如何有效地找到它属于区域 x∈(0,3],y∈(30,50]?
【问题讨论】:
-
看起来很简单:
if (x >= 0 and x < 3 and y >= 30 and y < 50){in_the_zone = true;} -
看似简单,其实不然。
-
请详细说明。我提出的方法是否不合适?
-
您有数以万计的区域,并且您拥有这些区域的 x、y 坐标范围列表。当给定 (x,y) = (2,36),这是用户的位置时,您必须有效地搜索它所属的区域。该位置属于区域 x∈(0,3],y∈(30,50]) 并不明显。一种天真的方法是遍历列表中的每个区域,但这会太慢。如果它是一维的,也许我们可以将区域范围的均值存储在二叉搜索树中并快速查找并比较一些,但它是二维的,这会使问题复杂化
-
你需要的数据结构叫做R-tree。
标签: algorithm math geolocation location geometry