我正在做一个基于地理位置的个人项目,我想根据用户的纬度和经度值来获取供应商。而且交易是供应商的供应半径可变,很少有供应商仅在其半径5公里之内供应,而有些供应商可能在整个城市供应。
解决此问题的一般方法是为每个供应商计算供应商与用户之间的距离。如果小于或等于其供应半径,则在结果中显示该供应商。
但这可能会很慢,所以我想我将城市分为四个区域(从google maps中为North East West South选择四个纬度和经度值),每添加一个供应商,我都会进行数学运算并分配一个他们可以在数据库中提供的区域。现在,只要我得到用户的纬度和经度,就可以确定区域并获取可以提供给该区域的供应商,进行距离计算并过滤掉它们。这样,我可以对较少数量的供应商(而不是整个列表)进行计算。
但这是一个好主意还是我可以做得更好?
在使用Postgres / Postgis时,可以利用空间索引,然后使用ST_DWithin(geom1,geom2,distance)类型查询,请参阅ST_DWithindocs。空间索引将为您划分空间,从而使这种查询非常有效,并且避免您不得不提出自己的任何空间划分方案。
可以使用的另一种运算符是<->运算符,该运算符非常有效地使用空间索引,并且在order by子句中使用,以将y事物最接近某个点x,(k最近邻居搜索)请参见<->运算符文档。要使此运算符正确使用索引(要搜索的点),需要注意的一点是必须是一个常数,因为听起来像是您的情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句