iPhone地理半径搜索;使用Core Data或SQLite



我正在编写一个应用程序,该应用程序在数据库中有大约7000家欧洲餐馆,我想显示离用户最近的餐馆列表,例如所有这些餐馆都在用户半径5公里的范围内。

我可以在服务器上做搜索,但它需要互联网。是否可以在iPhone上保存数据并查询数据库?我在core data或iphone SQLite中找不到任何类似的引用。

我真的需要用毕达哥拉斯和东西自己编程,并计算每个查询到每个餐馆的距离吗?还是有别的办法?

[update]我想使用它,就像我已经在服务器上做的(但要在iPhone上做):SELECT * FROM restaurants WHERE ST_Distance_Sphere(geo, ST_GeomFromText(POINT(55.98767 57.12345), -1)) < 5000

我希望用户能够找到一家餐馆,即使她没有互联网连接,例如当你在国外。

阅读纬度和经度计算。经度和纬度本身都是球面上用圆弧表示的距离。如果您有一个由纬度和经度表示的位置数据库,那么您可以执行fetch操作,只查找那些落在用户当前位置的南北纬几度和东西经几度范围内的记录。

所以你最终会得到一个类似于(pseudo -code)的谓词:

latitude >= (currentLatitude-aFewMinutesOfArc)
AND
latitude <= (currentLatitude+aFewMinutesOfArc)
AND
longitude >= (currentLongitude-aFewMinutesOfArc)
AND
longitude >= (currentLongitude+aFewMinutesOfArc)

…这将创建一个逻辑框,返回该框内的所有餐厅记录。然后,如果您需要计算精确的距离,您只需对7,000条记录中的少数记录进行计算。

我建议阅读一下Location Services,因为它提供了很多处理位置计算的工具。

关于是否使用纯SQL或Core Data,请查看之前关于该主题的答案。简而言之,如果您已经了解C SQL api,并且您的数据简单,大型且静态,那么SQL是一个不错的选择。如果您可以花时间学习Core Data,并且您的数据是复杂和动态的,那么无论数据大小,Core Data都是更好的选择。

你可以在iOS上使用GeoFire。它使用Firebase来存储数据,但是由于Firebase维护一个本地缓存,所以它在没有网络连接的情况下仍然可以工作。它将处理GeoQueries以及在项目进入和离开您的查询时实时通知您。

[免责声明:我在Firebase工作]

相关内容

  • 没有找到相关文章

最新更新