Thanks for your help. I'm now using the direct database implementation and it works great with much leaner code than I had before.
$r=$db->query('SELECT pages_id, ('.$user_location->lng.'-lng)*('.$user_location->lng.'-lng) + ('.$user_location->lat.'-lat)*('.$user_location->lat.'-lat) AS "distance" FROM field_map_location ORDER BY distance');
$ides=array();
while($row=$r->fetch_row()) $ides[] = $row[0];
$query = 'id=' . implode('|', $ides); // Output: 1075|1070|1074
$locs = $pages->find($query);
foreach($locs as $result) {
echo "{$result->id}|"; //Output: 1070|1074|1075
}
However, there is still one problem left. If I look at the $query, the IDs are in the right order (based on their distance to the $user_location) but as soon as I echo them out in the foreach loop they are ordered by ID. I guess that the $pages->find function automatically orders the pages if no 'sort' variable is given. Is there a way to sort them according to the query string?