【问题标题】:IPhone - SQLite distance by Latitude and LongitudeiPhone - 经纬度的 SQLite 距离
【发布时间】:2011-10-13 07:13:48
【问题描述】:

我的应用程序中有一个嵌入式数据库,其中包含一些感兴趣点的所有纬度和经度,我需要知道我与这些点的距离(使用 GPS 获取我的位置)。 我的问题是:我刚刚发现 SQLite 无法使用我拥有的查询计算距离,因为它不计算三角函数(SIN、COS ...)。我试图避免使用此查询以编程方式计算这些距离:

NSLog(@"SELECT ((ACOS(SIN(%@ * PI() / 180) * SIN(lat * PI() / 180) + COS(%@ * PI() / 180) * COS(lat * PI() / 180) * COS((%@ – lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `members` HAVING `distance`<=’1000′ ORDER BY `distance`", Latitude,Latitude, Longitude);

有人有解决办法吗?

问候!

【问题讨论】:

    标签: iphone geolocation


    【解决方案1】:

    用 Objective C 来做。

    这个人也有同样的问题:http://www.thismuchiknow.co.uk/?p=71

    【讨论】:

    • 链接到答案真的很好。定义一个从 sqlite 调用的 c 函数来计算距离。它很快而且有效。我唯一要宣传的是,您可以使用 BETWEEN 语句来优化您的搜索。我正在使用这个:SELECT * FROM Locations WHERE BETWEEN %f AND %f AND lon BETWEEN %f AND %f ORDER BY distance(lat, lon, %f, %f) LIMIT 25
    • @KennyWinker 请提供 %f 值
    【解决方案2】:

    是的,您可以根据位置周围的矩形进行简单查询,然后使用半正弦公式计算确切的距离。

    这样做的好处是您可以在 SQLite 表上使用索引。

    关于半正弦公式的更多信息:http://en.wikipedia.org/wiki/Haversine_formula

    【讨论】:

    • 你有例子链接吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2015-02-26
    • 1970-01-01
    相关资源
    最近更新 更多