地理应用算法

时间:2012-12-10 19:58:44

标签: java android algorithm

我有一个应用程序,在用户驾驶汽车时显示最近的加油站。现在我可以显示前10个最近的加油站。我想要建立的也是显示一个视图,显示用户当前位置和我从数据库收集的前10位之间最近的加油站之间的距离,即第一个。 我在想什么

1- The GPS provide a new location to my application.

2- run an SQL query to get the top 10 gas stations in a Circle that it center is the user location and it radius is 2 km.

3- calculate the distance between the current location and the first gas station returned from the Query above (which is the nearest one) .

4- display that distance to user.

现在为什么我不认为这不好,因为gps提供商可能会迟到提供一个新的位置,因为我过滤它们在200米精度内。我做了一个I / O操作,可能需要很长时间才能返回。所有这些都将导致用户与最近的加油站之间保持固定的距离并等待更新。

请注意以下内容

1-我为查询中使用的列构建索引,以加速并防止完全扫描问题。

2 - 这就是我如何定义我的更新请求以尽快获得位置更新。 this.mLocationManager.requestLocationUpdates("gps", 0, 0, this.mLocationListener);

有更快的方法吗?

2 个答案:

答案 0 :(得分:0)

有些方法快了1000倍。 为什么一个可怕的慢sql?在嵌入式系统中,sql不是最佳选择。 读取内存中的所有加油站(阵列)。至少是坐标和站号。

一个简单的灵魂:进行蛮力搜索并计算所有距离,保持最近的距离 当你找到最近的车站时,你可以查询sql的地址,名称等。

如果你有超过10,000个电台,你可能需要一个更好的解决方案。

答案 1 :(得分:0)

如果你想使用某个数据库,我会推荐mongoDB - 没有SQL数据库。 它具有“近”功能的GeoIndex。

这可以获得非常高的读取性能,而且您不需要发明轮子。

请参阅http://www.mongodb.org/display/DOCS/Geospatial+Indexing