我正在编写一个具有ca的应用程序。数据库中有7000家欧洲餐馆,我想向用户显示最近的餐馆列表,例如所有距离用户5公里半径的餐馆。

我可以在服务器上进行搜索,但随后需要互联网。是否可以将数据保存在iPhone上并查询数据库?我在核心数据或iPhones SQLite中找不到类似的引用。

我真的需要自己用毕达哥拉斯和东西编程,并在每次查询中计算到每个餐厅的距离吗?还是有其他方法?

[更新]我想像在服务器上一样使用它(但要在iPhone上使用它):SELECT * FROM restaurants WHERE ST_Distance_Sphere(geo, ST_GeomFromText(POINT(55.98767 57.12345), -1)) < 5000
我希望用户即使没有互联网连接也能找到餐厅,例如在国外时。

最佳答案

阅读有关经度和纬度的计算。纬度和经度本身就是在球面上表示为圆弧的距离。如果您有一个由纬度和经度表示的位置的数据库,则可以执行访存以仅查找落在用户当前位置的北纬和南纬数度以及东经和西纬度数度以内的那些记录。

因此,您最终将得到一个类似于(伪代码)的谓词:

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

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

我建议您阅读Location Services,因为它提供了许多用于处理位置计算的工具。

关于使用纯SQL还是核心数据,请查看此previous answer on the subject.简而言之,如果您已经知道C SQL api并且您的数据是简单,庞大和静态的,那么SQL是一个不错的选择。如果您可以花时间学习核心数据,并且您的数据既复杂又动态,那么无论数据大小如何,核心数据都是更好的选择。

关于iPhone地理半径搜索;使用核心数据还是SQLite?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6691051/

10-14 13:39
查看更多