2011-08-17 47 views
0

我正在工作的应用程序,需要找到特定产品的附近分销商。截至目前,我有当前位置的经度和纬度。除此之外,我也有所有产品经销商名单,各自的坐标。我正在运行查询,该查询给了我最近的10个位置,但是为了它彻底查看了DB中的每条记录,计算出当前位置和特定位置之间的距离。它需要太多时间。还有其他的选择吗?需要寻找附近的位置帮助

回答

1

您是否可以通过创建最大和最小长度和纬度(例如距当前位置10英里内)来首先缩小数据集的范围。然后,您可以通过lat> minLat查询数据集,然后通过计算最小子集上的实际距离(如果您需要),然后按照您的建议对它们进行排序。

+0

看起来像德米特里也打败了我吧。 –

0

您可以通过在您的位置周围创建矩形缓冲区来筛选位置列表,以过滤附近的位置。

SELECT * FROM表t WHERE t.lat <(LAT + BUFF)AND t.long <(长+ BUFF)AND t.lat>(LAT-BUFF)AND t.long>(长的buff)

纬度,经度 - 您的位置,浅黄色 - 一定的价值,你可以调节,以满足您的应用需求(如100 英尺,1英里等)

然后你就可以在返回的记录运行的距离计算。

1

为避免计算每个位置的距离,您可以使用最大左上角长度(上10英里和后10英里)和最大右下角长(10英寸)创建一个纬度长的方块(可以说为10英里)英里和10英里右)。然后,您的查询将在该框中使用> =和< =找到经纬度,然后计算每个距离以滤除超过10英里的角落中的位置。

另一个选项是查看spatial indexing for SQLite

+0

Spatialite iOS http://stackoverflow.com/questions/4793970/how-to-compile-spatialite-for-ios – Joe