首页 > 代码库 > 数据库中查询,两个经纬度之间的距离代码
数据库中查询,两个经纬度之间的距离代码
double radians(double degrees){ return degrees * M_PI / 180.0;}- (void)testDistance{ FMDatabase *db = [FMDatabase databaseWithPath:_writableDBPath]; if (![db open]) { return; } [db makeFunctionNamed:@"distance" maximumArguments:4 withBlock:^(sqlite3_context *context, int argc, sqlite3_value **argv) { double values[4]; // get the double values for the four arguments for (int i = 0; i < 4; i++) { int dataType = sqlite3_value_numeric_type(argv[i]); if (dataType == SQLITE_INTEGER || dataType == SQLITE_FLOAT) { values[i] = sqlite3_value_double(argv[i]); } else { sqlite3_result_null(context); return; } } // let‘s give those values meaningful variable names double lat = radians(values[0]); double lng = radians(values[1]); double lat2 = radians(values[2]); double lng2 = radians(values[3]); // calculate the distance double result = 6371.393 * acos(cos(lat2) * cos(lat) * cos(lng2 - lng) + sin(lat2) * sin(lat)); sqlite3_result_double(context, result); }]; int rowCount = 0; FMResultSet *rs = [db executeQuery:@"SELECT *,distance(lat,lng,34.27344,108.95996) AS distance FROM hotel WHERE cityId = 10 AND lat > 33.27344 AND lat < 35.27344 AND lng > 107.95996 AND lng < 109.95996 ORDER BY distance ASC LIMIT 10"]; while ([rs next]) { rowCount++; NSLog(@"Does %@,%@ ", [rs stringForColumnIndex:1],[rs stringForColumn:@"distance"]); }}
数据库中查询,两个经纬度之间的距离代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。