iOS 5中SQLite的距离函数非常慢

iOS 5中SQLite的距离函数非常慢,第1张

概述我已经使用了很长时间的C函数来计算SQLLite中坐标之间的距离. 问题是,对于完全相同的数据库和不同的iOS设备(4和5),执行相同查询的时间是运行iOS 5时的5倍. 有人知道为什么吗? 这是距离的代码: static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **argv){// check th 我已经使用了很长时间的C函数来计算sqllite中坐标之间的距离.

问题是,对于完全相同的数据库和不同的iOS设备(4和5),执行相同查询的时间是运行iOS 5时的5倍.

有人知道为什么吗?

这是距离的代码:

static voID distanceFunc(@R_301_4777@_context *context,int argc,@R_301_4777@_value **argv){// check that we have four arguments (lat1,lon1,lat2,lon2)assert(argc == 4);// check that all four arguments are non-nullif (@R_301_4777@_value_type(argv[0]) == sqlITE_NulL || @R_301_4777@_value_type(argv[1]) == sqlITE_NulL || @R_301_4777@_value_type(argv[2]) == sqlITE_NulL || @R_301_4777@_value_type(argv[3]) == sqlITE_NulL) {    @R_301_4777@_result_null(context);    return;}// get the four argument valuesdouble lat1 = @R_301_4777@_value_double(argv[0]);double lon1 = @R_301_4777@_value_double(argv[1]);double lat2 = @R_301_4777@_value_double(argv[2]);double lon2 = @R_301_4777@_value_double(argv[3]);// convert lat1 and lat2 into radians Now,to avoID doing it twice belowdouble lat1rad = DEG2RAD(lat1);double lat2rad = DEG2RAD(lat2);// apply the spherical law of cosines to our latitudes and longitudes,and set the result appropriately// 6378.1 is the approximate radius of the earth in kilometres@R_301_4777@_result_double(context,(acos(sin(lat1rad) * sin(lat2rad) + cos(lat1rad) * cos(lat2rad) * cos(DEG2RAD(lon2) - DEG2RAD(lon1))) * 6378.1) * 1000); }

这是一个关于我如何使用它的例子:

Select distance(Latitude,Longitude,-22.89095,-47.05134) from table

请,任何帮助将非常感谢

谢谢

解决方法 好.
我已经发现它是iOS 5.0上的一个问题
即使在最终版本中,仍然会发生缓慢的查询.

我不得不删除“按距离排序(纬度,经度,-47.05134)”,查询再次变快.

然后我使用代码进行排序……不是最好的方式.但…

总结

以上是内存溢出为你收集整理的iOS 5中SQLite的距离函数非常慢全部内容,希望文章能够帮你解决iOS 5中SQLite的距离函数非常慢所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1033556.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存