我在做应用程序,其中使用sqlite数据库文件来获取数据。 db中有店名,地址,城市,纬度,经度等栏目。如何从当前位置获得10个最近的位置
我能够获得位置的经纬度,并且能够使用经度和纬度值计算当前位置和商店位置之间的距离(以db为单位)。
这里我的问题是 我需要/显示距离当前位置最近(距离)的10个商店名称(从db)。
请建议我或者给一个参考链接来解决这个问题
谢谢
我在做应用程序,其中使用sqlite数据库文件来获取数据。 db中有店名,地址,城市,纬度,经度等栏目。如何从当前位置获得10个最近的位置
我能够获得位置的经纬度,并且能够使用经度和纬度值计算当前位置和商店位置之间的距离(以db为单位)。
这里我的问题是 我需要/显示距离当前位置最近(距离)的10个商店名称(从db)。
请建议我或者给一个参考链接来解决这个问题
谢谢
有thousands upon thousands of sites,让您计算两点间的距离公式。大多数人认为你想考虑地球的曲率;没有这一点,它是简单的几何(毕达哥拉斯定理)。在伪代码:
的sqrt((X1-X2)^ 2 +(Y1-Y2)^ 2)
建设,体现了无论公式您在ORDER BY
条款选择一个SQL查询,考虑到记录您正在搜索的固定点的经度和纬度。既然你不关心绝对距离,而只是距离的大小,你可能会做一些东西来节省CPU时间,比如跳过毕达哥拉斯定理的平方根部分。
要将结果集限制为10,请在查询中使用LIMIT 10
,您将获得前10个匹配。
请注意,如果您有很多位置,SQLite将不会是进行地理查询的理想平台。您必须为每个查询的每一行执行一次距离计算,这将是CPU密集型和缓慢的。
您可能最好定位一个可以进行地理索引并以兼容格式提供数据的库。 (尝试搜索“Java地理索引”。)Lucene有一个地理扩展,但我不知道它是否超出了Alpha。
另一种方法是将“最近的”代码移动到网络中某个应用程序服务器上。这样你就不会在移动设备上执行任何cpu密集型的东西,它只需要一个活动的inet连接。
我最近创建了一个应用程序,就像这样,这是我如何做它:
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);
}
乌拉圭回合的答复您好感谢,ü意味着我需要在查询本身使用上面给出的公式。我的疑问是,如果我们提交经纬度数据,可以得到距离..... – praveenb 2010-10-12 04:35:59