如何从当前位置获取10个最近的位置

时间:2010-10-11 12:44:19

标签: android

我在做app,使用sqlite db文件获取数据。 数据库中的表,包含商店名称,地址,城市,纬度,经度等列。

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

我的问题是 我需要获取/显示距离当前位置最近(距离)的10个商店名称(来自db)。

请建议我或提供参考链接以解决此问题

谢谢

4 个答案:

答案 0 :(得分:2)

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

  

sqrt((x1-x2)^ 2 +(y1-y2)^ 2)

构造一个SQL查询,它包含您在ORDER BY子句中选择的任何公式,并考虑您要搜索的固定点的纬度和经度。既然你不关心绝对距离,而只关心距离的大小,你可以做一些事情来节省CPU时间,比如跳过毕达哥拉斯定理的平方根部分。

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

答案 1 :(得分:1)

请注意,如果您有很多位置,SQLite将不会成为进行地理查询的理想平台。您将不得不对每个查询的每一行进行距离计算,这将是CPU密集型且速度慢。

最好找一个可以进行地理索引并以兼容格式提供数据的库。 (尝试搜索“Java地理索引”。)Lucene有一个地理扩展,但我不知道它是否曾用于alpha。

答案 2 :(得分:0)

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

答案 3 :(得分: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);


                 }