I have been using for a long time a C function that calculates the distance between coordinates in SQLLite.
The thing is that for the very same database and different iOS devices (4 and 5) the time for executing the same query is 5 times longer when running iOS 5.
Does anybody knows why?
Here’s the code for the distance:
static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
// check that we have four arguments (lat1, lon1, lat2, lon2)
assert(argc == 4);
// check that all four arguments are non-null
if (sqlite3_value_type(argv[0]) == SQLITE_NULL || sqlite3_value_type(argv[1]) == SQLITE_NULL || sqlite3_value_type(argv[2]) == SQLITE_NULL || sqlite3_value_type(argv[3]) == SQLITE_NULL) {
sqlite3_result_null(context);
return;
}
// get the four argument values
double lat1 = sqlite3_value_double(argv[0]);
double lon1 = sqlite3_value_double(argv[1]);
double lat2 = sqlite3_value_double(argv[2]);
double lon2 = sqlite3_value_double(argv[3]);
// convert lat1 and lat2 into radians now, to avoid doing it twice below
double 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
sqlite3_result_double(context, (acos(sin(lat1rad) * sin(lat2rad) + cos(lat1rad) * cos(lat2rad) * cos(DEG2RAD(lon2) - DEG2RAD(lon1))) * 6378.1) * 1000); }
and here’s a example on how I am using it:
Select distance(Latitude, Longitude,-22.89095,-47.05134) from TABLE
Please, any help will be very appreciated
Thanks
OK.
I have figured out it’s an issue on iOS 5.0
Even with the final release the slow querys were still happening.
I had to remove the “
order by distance(Latitude, Longitude,-22.89095,-47.05134)” and the query got faster again.Then I did the sorting using code…
Not the best way. but…