BRANCH_NAM . " " . $properties->ADDRESS; break; case "schools": $location = $properties->LOCNAMESHO . " " . $properties->LOCTYPE . " " . $properties->LOCADDRESS; break; case "police": $location = $properties->LOCATION . " " . $properties->PHONE__; break; case "fire": $location = $properties->LOCATION; break; } return $location; } try { // Get the address submited by the user. $result = ask("", array("choices" => "[ANY]")); if(strstr($result->value, " #")) { $message = explode(" #", $result->value); $address = trim($message[0]); $location_type = trim($message[1]); // Get all of the CouchDB DB names that hold locational data. $all_db_names = json_decode(getDatabaseNames(), true); $db_names = array(); foreach($all_db_names as $key => $value) { if(substr($value, 0, 1) == "_") { continue; } array_push($db_names, $value); } // If the user sent in a valid DB name, get the locations. if(in_array($location_type, $db_names)) { // Geocode address and get lat / lon. $geocoded_address = json_decode(geoCodeAddress($address)); $lat = $geocoded_address->results[0]->geometry->location->lat; $lon = $geocoded_address->results[0]->geometry->location->lng; // Create a bound box from the lat / lon pair. $bb_array = makeBoundingBox($lon, $lat); // Get the locations from geocouch. $locations = json_decode(getLocations($bb_array, $location_type)); // If locations are found,iterate over JSON and render to user. if($locations->rows) { foreach($locations->rows as $location) { $properties = $location->value->properties; $geometry = $location->value->geometry->coordinates; $place = "Location: " . makeLocation($location_type, $properties); $distance = round(calculateDistance($lat, $lon, $geometry[1], $geometry[0]), 2); $place .= " Distance: $distance miles."; array_push($phl_locations, array("distance" => $distance, "place" => $place)); } // Use the LOCATION_NUMBER_LIMIT constant to throttle numbr of messages sent to user. $limit = LOCATION_NUMBER_LIMIT < count($phl_locations) ? LOCATION_NUMBER_LIMIT : count($phl_locations); for($i = 0; $i<$limit; $i++) { say($phl_locations[$i]["place"]); } } // Otherwise, tell user no locations found. else { say("No locations found."); } } // Otherwise, tell them to only send valid resource names. else { say("Send address followed by #".implode(", #", $db_names)); } } // No location type sent. else { say("You must sent a location type to use this service."); } } // If address can not be Geocoded. catch (GeoCodeException $ex) { say("An error occured. ". $ex->getMessage()); hangup(); } // If call can not be made to GeoCoud catch (CouchException $ex) { say("An error occured. ". $ex->getMessage()); hangup(); } // Last ditch exception handler. catch (Exception $ex) { say("Sorry. Something really bad happened."); _log("*** ". $ex->getMessage() . " ***"); hangup(); } ?>