我正在写一个应用程序,在数据库中有大约7000家欧洲餐厅,我想显示离用户最近的餐厅列表,例如,所有这些餐厅都在半径为5公里的范围内。
我可以在服务器上进行搜索,但它需要互联网。是否可以将数据保存在iPhone上并查询数据库?我在core data或iPhones SQLite中找不到任何与此类似的引用。
我真的需要用毕达哥拉斯之类的东西自己编程,并计算每个查询到每个餐厅的距离吗?还是有别的办法?
更新我想要像在服务器上一样使用它(但要在iPhone上使用):SELECT * FROM restaurants WHERE ST_Distance_Sphere(geo, ST_GeomFromText(POINT(55.98767 57.12345), -1)) < 5000
我希望用户能够找到一家餐厅,即使她没有互联网连接,例如当你在国外时。
发布于 2011-07-16 02:45:26
阅读有关纬度和经度计算的内容。纬度和经度本身就是用球面上的圆弧表示的距离.如果您有一个由纬度和经度表示的位置数据库,那么您可以执行一次fetch操作,以便仅查找位于用户当前位置的北纬和南纬几度和东经几度和西经几度范围内的记录。
所以你最终会得到一个类似(psuedo-code)的谓词:
latitude >= (currentLatitude-aFewMinutesOfArc)
AND
latitude <= (currentLatitude+aFewMinutesOfArc)
AND
longitude >= (currentLongitude-aFewMinutesOfArc)
AND
longitude >= (currentLongitude+aFewMinutesOfArc)..。这将创建一个逻辑框,它将返回该框中的所有餐厅记录。然后,如果您需要计算确切的距离,则只需对7000条记录中的一小部分进行计算。
我推荐阅读Location Services,因为它提供了很多处理位置计算的工具。
至于是使用普通的SQL还是核心数据,简单地看一下这个previous answer on the subject.,如果你已经知道C SQL api,并且你的数据是简单的、大的和静态的,那么SQL是一个很好的选择。如果您可以花时间学习核心数据,并且您的数据是复杂和动态的,那么无论数据的大小如何,核心数据都是更好的选择。
发布于 2014-08-27 06:59:37
您可以使用GeoFire for iOS。它使用Firebase存储数据,但由于Firebase维护本地缓存,因此它在没有网络连接的情况下仍然可以工作。它将处理GeoQueries,并在项目进入和离开您的查询时实时通知您。
免责声明:我在Firebase工作
https://stackoverflow.com/questions/6691051
复制相似问题