将城市划分为区域,这是一个好主意吗?

时间:2014-07-05 08:37:47

标签: ruby-on-rails ruby google-maps postgis rails-geocoder

我正在开展一个基于地理定位的个人项目,我想根据用户的纬度&经度值。这笔交易是供应商可变供应半径,很少有供应商只在半径5公里范围内供应,而有些供应商可供应整个城市。

通常的方法是让每个供应商计算供应商与供应商之间的距离。用户。如果它小于或等于它的供应半径,则在结果中显示该供应商。

但这可能会非常缓慢,所以我认为我将城市划分为四个区域(从东北西南的谷歌地图中选择四个纬度和经度值)&无论何时添加供应商,我都会进行数学计算。分配它们可以在数据库中提供的区域。现在每当我得到用户的纬度&经度我确定区域&获取可以提供给该区域的供应商,进行距离计算和过滤掉它们。这样我就可以用较少数量的供应商而不是整个列表进行计算。

但这是一个好主意还是我可以做得更好?

1 个答案:

答案 0 :(得分:1)

在使用Postgres / Postgis时,您可以使用spatial indexes,然后使用ST_DWithin(geom1,geom2,distance)类型查询,请参阅 ST_DWithin docs。空间索引将为您分区空间,使这种查询非常有效,并避免您必须提出自己的任何空间分区方案。

您可以使用的另一个操作员是&lt; - &gt;运算符,它对空间索引非常有效并且在order by子句中使用,以获得最近的y事物到某个点x,(k最近邻搜索)参见<-> operator docs.这个运算符正常工作的一个警告使用索引,你要搜索的点,需要是一个常数,因为它听起来像你的情况。