好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

数据库中查询,两个经纬度之间的距离代码

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 " ]); } }

 

数据库中查询,两个经纬度之间的距离代码

标签:style   blog   io   ar   color   os   sp   for   on   

查看更多关于数据库中查询,两个经纬度之间的距离代码的详细内容...

  阅读:22次