diff --git a/terrain.php b/terrain.php index faa42fe..6a8d9bd 100644 --- a/terrain.php +++ b/terrain.php @@ -14,10 +14,35 @@ if (!preg_match('/-?[0-9]{1,3}\.[0-9]{2,}/', $VARS['long'])) { } // Round to 2 digits (approx. 1.1km) -$lat = number_format((float) $VARS['lat'], 2, '.', ''); -$long = number_format((float) $VARS['long'], 2, '.', ''); +$lat = (float) number_format((float) $VARS['lat'], 2, '.', ''); +$long = (float) number_format((float) $VARS['long'], 2, '.', ''); -$terrainid = $database->select('terrain', 'type', ["AND" => ["latitude" => $lat, "longitude" => $long]])[0]; +if (abs($lat) > 90.00 || abs($long) > 180.00) { + sendError("Coordinates out-of-bounds. Are you sure you're on Earth?", true); +} + +$finallat = $lat; +$finallong = $long; + +if ($database->has('terrain', ["AND" => ["latitude" => $lat, "longitude" => $long]])) { + // We're good +} else if ($database->has('terrain', ["AND" => ["latitude" => $lat + .01, "longitude" => $long]])) { + $finallat = $lat + 0.01; +} else if ($database->has('terrain', ["AND" => ["latitude" => $lat, "longitude" => $long + .01]])) { + $finallong = $long + 0.01; +} else { + // last resort + $tries = 0; + while (!$database->has('terrain', ["AND" => ["latitude" => $finallat, "longitude" => $finallong]]) && $tries < 5) { + $finallat = $finallat + 0.01; + $finallong = $finallong + 0.01; + $tries++; + } + if ($tries >= 5) { + sendError("Terrain data not found for the given coordinates or anything nearby.", true); + } +} -$out = ["status" => "OK", "type" => $terrainid]; -echo json_encode($out); \ No newline at end of file +$terrainid = $database->select('terrain', 'type', ["AND" => ["latitude" => $finallat, "longitude" => $finallong]])[0]; +$out = ["status" => "OK", "type" => $terrainid, "latitude" => $finallat, "longitude" => $finallong]; +echo json_encode($out);