0

我有一个应用程序,可以在用户驾驶汽车时为他们显示最近的加油站。现在我可以显示前 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 提供商可能会迟到提供新位置,因为我将它们过滤到 200m 精度内。我做了一个可能需要很长时间才能返回的 I/O 操作。所有这一切都会导致用户与最近的加油站之间的距离固定,等待更新。

请注意以下事项

1-我为查询中使用的列建立索引以加快和防止完全扫描问题。

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

有没有更快的方法来做到这一点?

4

2 回答 2

0

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

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

如果您有超过 10.000 个站点,那么您可能需要一个更好的解决方案。

于 2012-12-10T20:13:59.180 回答
0

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

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

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

于 2012-12-10T20:28:25.993 回答