function find_distance_coords(&$pointarray, $distance) { // We find the nearest lower point for each distance, // then linearly interpolate to get a more accurate point // this saves having quite so many points-per-curve $index = find_distance($pointarray, $distance); $ratio = ($distance - $pointarray[$index][2]) / ($pointarray[$index + 1][2] - $pointarray[$index][2]); $x = $pointarray[$index][0] + $ratio * ($pointarray[$index + 1][0] - $pointarray[$index][0]); $y = $pointarray[$index][1] + $ratio * ($pointarray[$index + 1][1] - $pointarray[$index][1]); return array($x, $y, $index); }
$state = strtoupper($state); $json_states = get_states('cities.csv', $state); Flight::json($json_states); }); // Lists a single city, can receive radius query data Flight::route('GET /v1/states/@state/cities/@city', function ($state, $city) { $state = strtoupper($state); if (is_numeric($city)) { $current_city = find_city_by_id('cities.csv', $city); } else { $current_city = find_city_by_name('cities.csv', $city, $state); } if (isset($current_city)) { $cityname = $current_city->name; $radius = Flight::request()->query->radius; $nearby = find_distance($state, $cityname, $radius, 'cities.csv'); Flight::json($nearby); } }); // Allow users to mark visits to a city Flight::route('POST /v1/users/@user/visits', function ($user) { $city = Flight::request()->data->name; $state = Flight::request()->data->state; $current_city = find_city_by_name('cities.csv', $city, $state); if (isset($current_city)) { $city_id = $current_city->id; write_to_visits($user, $city_id); } }); // Allows users to see visited cities and enter new visited cities as a query Flight::route('GET /v1/users/@user/visits', function ($user) {