我是工作应用程序,需要找到附近的分销商的特定产品。到目前为止,我有当前的位置,纬度和经度。除此之外,我还列出了所有产品分销商与他们各自的坐标。我正在运行查询,它给我最近的10个位置,但为此,它遍历数据库中的每个记录,计算当前和那个特定位置之间的距离。它花了太多的时间。还有没有别的选择呢?
发布于 2011-08-17 22:49:31
您可以不首先通过创建最大和最小长度和最小长度(例如,在当前位置的10英里内)来缩小数据集的范围。然后,您可以通过lat > minLat和lat < maxLax等查询数据集。然后,如果需要,还可以通过计算缩减子集上的实际距离来对它们进行排序。
发布于 2011-08-17 22:51:11
为了避免计算每个位置的距离,您可以使用左上角的最大纬度长度(向上10英里,向左10英里)和右下角的最大纬度长度(向下10英里,向右10英里)创建一个经度长框(假设10英里)。然后,您的查询将使用>=和<=在该框中找到稍后的长线,然后计算每个长线的距离,以过滤掉角落中超过10英里的位置。
另一种选择是研究spatial indexing for SQLite。
发布于 2011-08-17 22:50:11
你可以通过在你的位置周围创建矩形缓冲区来过滤附近的位置,从而缩小位置列表的范围。
从表t中选择* WHERE t.lat<(lat+buff)和t.long<(long+buff)和t.lat>(lat-buff)和t.long>(long-buff)
lat、long -您位置、缓冲区-您可以调整一些值以匹配您的应用程序需求(例如,100英尺、1英里等)
然后,您可以对返回的记录运行距离计算。
https://stackoverflow.com/questions/7094699
复制相似问题