如何根据区域的人口密度计算地图搜索的动态默认半径?

时间:2012-04-09 21:53:08

标签: python search geometry geospatial computational-geometry

我希望为社区转租广告网站做这件事,但从理论上讲,算法对于任何本地搜索都是类似的。

搜索的区域越少,搜索的默认半径越高。 另一方面,人口密度高的地区应该具有较低的默认半径,以保持当地的相关性。

这可能更像是一个数学问题,而不是编程问题,但代码非常受欢迎。到目前为止,我已计算出每个城镇或村庄15英里范围内的转租数量,并将其作为密度的近似值保存在数据库中。我打算用这个数字来计算当有人搜索城镇或村庄时搜索的距离。

为了测试任何建议的解决方案,我提出了一些我想要算法提出的近似数字。如果在一个点的15英里范围内有很多转租,比如30k,我希望搜索的默认半径大约为3英里。如果说1或2很少,则默认半径应高达25英里,如果周围没有地方则更高。具有约1k转换的中距离区域将具有15英里的默认半径。这些只是一些例子,密度将随着数据库中的数量增加或缩小。

Population -> Default search radius
0          -> very high (~60 miles or more)
1          -> 25 miles
1k         -> 15 miles
30k        -> 3 miles

我是朝着正确的方向前进的吗?对于以代码为中心的答案,Python或PHP将是首选。

谢谢

1 个答案:

答案 0 :(得分:1)

合理的方法是定义区域,使其包含相同数量的人,然后每个区域的可用公寓数量大致相同。

用数学方式写这个:

N = total number of people within a region
d = population density of the region (taken to be what you list as population)
A = Area of region
R = Radius of the region A

所以,N = d*A = d*pi*R*R,我们希望N保持不变,因此R = K*sqrt(1/D),其中K是一个常数,用于匹配您的数字,或大约500英里。然后,

30K    ->   2.9  miles
 1K    ->   16   miles
  1    ->   500  miles

所以它适用于前两个,虽然不是人口为1的极端情况(但不清楚1是真正重要的考虑因素,而不是一个特殊的情况,它都是自己的)。无论如何,我认为这种方法有一定意义,至少可以考虑一些事情。