我正在使用app,需要找到特定产品的附近分销商。截至目前,我有当前位置的纬度和经度。除此之外,我还列出了所有产品经销商及其各自的坐标。我正在运行查询,它给出了最近的10个位置,但为此,它会彻底记录DB中的每个记录,计算当前和特定位置之间的距离。这花费了太多时间。我还有其他选择吗?
答案 0 :(得分:1)
首先,您可以通过创建max和min long和lat(比如在当前位置的10英里范围内)来缩小数据集的范围。然后,您可以通过lat>查询数据集。 minLat和lat< maxLax等。如果您需要,可以通过计算缩小子集上的实际距离来对它们进行排序。
答案 1 :(得分:1)
为了避免计算每个位置的距离,您可以使用最大左上角长度(向上10英里,向左10英里)和最长右下角长(10英里)创建一个长长的盒子(比方说10英里)向下和10英里右)。然后,您的查询将使用> =和< =在该框中找到lat long,然后计算每个距离以过滤掉角落中超过10英里的位置。
另一个选择是研究spatial indexing for SQLite。
答案 2 :(得分:0)
您可以通过在您的位置周围创建矩形缓冲区来缩小位置列表,以过滤附近的位置。
SELECT * FROM table t WHERE.t<(lat + buff)AND t.long<(long + buff)AND t.lat>(lat-buff)AND t.long>(long-buff)
lat,long - 您的位置,buff - 您可以根据应用需求调整一些值(例如100 脚,1英里等)
然后你可以对返回的记录进行距离计算。