2014-07-05 32 views
1

我正在开发一个基于地理位置的个人项目,我想根据用户的纬度&获取供应商的经度值。而且这笔交易是供应商具有可变的供应半径,很少有供应商只在其半径5公里范围内供应,而有些供应商可能供应整个城市。将城市拆分成区域,这是个好主意吗?

一般的做法是为每个供应商计算供应商&用户之间的距离。如果它小于或等于供应半径,则在结果中显示该供应商。

但是,这可能会很慢,所以我想我的城市分成四个区(接从谷歌地图,有四种纬度经度&值,东北西部南部)&每当添加一个供应商,我会做数学&分配它们可以在数据库中提供的区域。现在,无论何时我获得用户的纬度&经度,我都会确定区域&获取可供应给该区域的供应商,然后将距离计算&过滤掉。通过这种方式,我可以根据供应商数量而不是整个列表进行计算。

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

+0

您使用的数据库是?这是空间索引擅长的,因为它们是二维的(使用R-Trees),并且可以在距离类型查询中包含,包含,相交。 –

+0

我打算使用postgres –

+0

在这种情况下,只需使用空间索引,然后使用ST_DWithin(geom1,geom2,distance)类型的查询,请参阅http://postgis.net/docs/ST_DWithin.html –

回答

1

在您使用的Postgres/PostGIS的,你可以利用spatial indexes,然后用ST_DWithin(geom1,geom2,距离)输入查询看到 ST_DWithin docs。空间索引将为你分配空间,使得这种查询非常高效,并避免你必须想出任何你自己的空间分区方案。

您可以使用的另一个运算符是< - >运算符,它对于空间索引非常有效,并按顺序by子句使用以获取某个点x的最近y值,(k最近邻居搜索)请参阅<-> operator docs.此操作符与索引一起正常工作的一个注意事项,即您正在搜索的要点,需要是一个常数,因为它听起来就像是您的情况。

+0

非常感谢你的回应! –

相关问题