2010-10-11 161 views
1

我在做应用程序,其中使用sqlite数据库文件来获取数据。 db中有店名,地址,城市,纬度,经度等栏目。如何从当前位置获得10个最近的位置

我能够获得位置的经纬度,并且能够使用经度和纬度值计算当前位置和商店位置之间的距离(以db为单位)。

这里我的问题是 我需要/显示距离当前位置最近(距离)的10个商店名称(从d​​b)。

请建议我或者给一个参考链接来解决这个问题

谢谢

回答

2

thousands upon thousands of sites,让您计算两点间的距离公式。大多数人认为你想考虑地球的曲率;没有这一点,它是简单的几何(毕达哥拉斯定理)。在伪代码:

的sqrt((X1-X2)^ 2 +(Y1-Y2)^ 2)

建设,体现了无论公式您在ORDER BY条款选择一个SQL查询,考虑到记录您正在搜索的固定点的经度和纬度。既然你不关心绝对距离,而只是距离的大小,你可能会做一些东西来节省CPU时间,比如跳过毕达哥拉斯定理的平方根部分。

要将结果集限制为10,请在查询中使用LIMIT 10,您将获得前10个匹配。

+0

乌拉圭回合的答复您好感谢,ü意味着我需要在查询本身使用上面给出的公式。我的疑问是,如果我们提交经纬度数据,可以得到距离..... – praveenb 2010-10-12 04:35:59

1

请注意,如果您有很多位置,SQLite将不会是进行地理查询的理想平台。您必须为每个查询的每一行执行一次距离计算,这将是CPU密集型和缓慢的。

您可能最好定位一个可以进行地理索引并以兼容格式提供数据的库。 (尝试搜索“Java地理索引”。)Lucene有一个地理扩展,但我不知道它是否超出了Alpha。

0

另一种方法是将“最近的”代码移动到网络中某个应用程序服务器上。这样你就不会在移动设备上执行任何cpu密集型的东西,它只需要一个活动的inet连接。

0

我最近创建了一个应用程序,就像这样,这是我如何做它:

distance = locationA.distanceTo(locationB); 

        if (distance <= 1000 * 10) 
//the 1000 stands for one kilometer, times 10 means 10 kilometers 
{ 

          point = new GeoPoint(
           (int) (lat * 1E6), 
           (int) (lng * 1E6)); 
         OverlayItem overlayItem = new OverlayItem(point, name, 
           suburb+", "+state+", "+postcode); 
         itemizedOverlay.addOverlay(overlayItem); 


       } 
相关问题