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);
}
Example #2
0
    $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) {