/** The xml should be <Address> <Value></Value> <Info></Info> <Stops> <Stop> <Name></Name> <Latitude></Latitude> <Longitude></Longitude> <Distance></Distance> <Buses></Buses> </Stop> . . </Stops> <Result> <BusStop></BusStop> <BusStopLatitude></BusStopLatitude> <BusStopLongitude></BusStopLongitude> <Offset></Offset> </Result> </Address> **/ function getStopForAddress($addr, $log, $mediaType) { //echo $addr; $stopDataString = ''; $originalRequestedLatitude = 0; $originalRequestedLongitude = 0; // create a xml string $stopXMLString = '<Address>'; $query = "Select StopName, Latitude, Longitude from Stops Where StopName = '" . $addr . "'"; $result = mysql_query($query); $rowsnum = mysql_num_rows($result); //find from the stop table..more than one stop found // if($rowsnum>1) // { // if($DEBUG) // echo "more than one stops are found with your search criteria <br/>"; // $log->LogDebug("[".$mediaType."] The address ".$addr." matches more than one in stops table. taking the first one "); // $stopXMLString=$stopXMLString."<Info>More than one stops are found with your search criteria</Info>"; // $stopXMLString=$stopXMLString."<ErrorCode>MS</ErrorCode>"; // $stopXMLString=$stopXMLString."<Stops>"; // // this is the case wehre we can check which is the best choice in terms of buses coming thourgh..E.g. Marathahalli // $maxBus=0; // for($i=0;$i<$rowsnum;$i++) // { // $row=mysql_fetch_row($result); // $stopXMLString=$stopXMLString."<Stop>"; // if($DEBUG) // echo $row[0]."<br/>"; // // $stopXMLString=$stopXMLString."<Name>".htmlentities($row[0])."</Name>"; // $stopXMLString=$stopXMLString."<Latitude>".$row[1]."</Latitude>"; // $stopXMLString=$stopXMLString."<Longitude>".$row[2]."</Longitude>"; // $stopXMLString=$stopXMLString."<Distance>-1</Distance>"; // $stopXMLString=$stopXMLString."<Buses>".getBusesForStop($row[0])."</Buses>"; // // // $stopDetails=$row[0]; // //$map->addMarkerByCoords($row[2],$row[1],$row[0],getBusesForStop($row[0]),''); // $NumberOfBus=getNumberOfBusesForStop($row[0]); // if($NumberOfBus>$maxBus) // { // $maxBus=$NumberOfBus; // $stopDataString=$row[0].":".$row[1].":".$row[2].":0"; // } // $stopXMLString=$stopXMLString."</Stop>"; // } // $stopXMLString=$stopXMLString."</Stops>"; // } // else //only one stop is found // if the stop is found if ($rowsnum == 1) { $stopXMLString = $stopXMLString . "<Info>Your address matches the correct stop name</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>OS</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; $stopXMLString = $stopXMLString . "<Stop>"; $row = mysql_fetch_row($result); // if($DEBUG) // echo " Your stop is ".$row[0]."<br/>"; $log->LogDebug("[" . $mediaType . "] The address " . $addr . " is a valid stopname "); $stopXMLString = $stopXMLString . "<Name>" . htmlentities($row[0]) . "</Name>"; $stopXMLString = $stopXMLString . "<Latitude>" . $row[1] . "</Latitude>"; $stopXMLString = $stopXMLString . "<Longitude>" . $row[2] . "</Longitude>"; $stopXMLString = $stopXMLString . "<Distance>-1</Distance>"; $stopXMLString = $stopXMLString . "<Buses>" . getBusesForStop($row[0]) . "</Buses>"; $stopXMLString = $stopXMLString . "</Stop>"; // $map->addMarkerByCoords($row[2],$row[1],$row[0],getBusesForStop($row[0]),''); $stopDataString = $row[0] . ":" . $row[1] . ":" . $row[2] . ":0"; $stopXMLString = $stopXMLString . "</Stops>"; } else { //no stop found..user must have entered some free string if ($rowsnum == 0) { //First check in the road database if the address meets //echo "going to the roads database"."<br/>"; // Checking in the road database $query = "Select * from newRoadAddresses Where Address ='" . $addr . "'"; $result = mysql_query($query); $rowsnum = mysql_num_rows($result); //the address was not found in the road database so get it from internet if ($rowsnum == 0) { // if($DEBUG) // echo "The address not found in the database so fetching from internet <br/>"; //$stopXMLString=$stopXMLString."<Info>The address ".$addr." not found in the database so fetching from internet</Info>"; $logString = "[" . $mediaType . "] The address " . $addr . " not found in the database so fetching from internet "; //$log->LogDebug("[".$mediaType."] The address ".$addr." not found in the database so fetching from internet "); // fimd from the net $addressString = "http://maps.google.com/maps/api/geocode/json?address=" . urlencode($addr) . ",+Bangalore,+Karnataka,+India&sensor=false"; $geocode = file_get_contents($addressString); $formattedAddress = return_between($geocode, "formatted_address", "\",", EXCL); $formattedAddressNoiseRemoved = return_between($formattedAddress, ":", "India", INCL); $place = substr($formattedAddressNoiseRemoved, 3); //echo $place."<br/>"; //exit(0); ///echo $place."<br/>"; //$arr=array(); $arr = explode(",", $place); //the address was not at all valid if (strcmp(trim($arr[0]), "Bangalore") == 0 && strcmp(trim($arr[1]), "Karnataka") == 0 && strcmp(trim($arr[2]), "India") == 0) { $log->LogDebug($logString . ". Invalid Address provided "); $stopXMLString = $stopXMLString . "<Info>Address is not valid. Try giving some locality name</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>AM</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; $stopXMLString = $stopXMLString . "<Stop>"; $stopXMLString = $stopXMLString . "</Stop>"; $stopXMLString = $stopXMLString . "</Stops>"; // if($DEBUG) // echo "<h3>".trim($addr)." Address is not valid"."</h3><br/>"; $stopDataString = "0:0:0:0"; } else { $locations = return_between($geocode, "location", "}", EXCL); //echo $locations; $latitude = return_between($locations, "lat\"", ",", EXCL); $latitude = substr($latitude, 3); //echo $latitude; list($lat, $long) = explode(",", $locations); list($cap, $val) = explode(":", $long); //echo trim($val); $addrLat = trim($latitude); $addrLong = trim($val); $originalRequestedLatitude = $addrLat; $originalRequestedLongitude = $addrLong; // add the marker for the searched address //$map->addMarkerIcon("marker_star.png","marker_shadow.png",15,29,15,3); //$map->addMarkerByCoords($addrLong,$addrLat,$addr,'',''); //Now check that we have any stop that is within 1 km of the stop. //we need to use the direct method to calculate the distance // we could have used the heversine formaula also but this is OK $query = "SELECT StopName, Latitude, Longitude FROM Stops WHERE (Latitude - " . $addrLat . " < .009) AND (Latitude - " . $addrLat . " > - .009) AND (Longitude - " . $addrLong . " > - .009) AND (Longitude - " . $addrLong . " < 0.009)"; //echo $query."<br/>"; $result = mysql_query($query); $rowsnum = mysql_num_rows($result); //we could not find any stops near to this address. if ($rowsnum == 0) { // this is the case when you gave an address that even could not be found usign the internet search $log->LogDebug($logString . ". No Stops nearby"); $stopXMLString = $stopXMLString . "<Info>Sorry we could not find any stops nearby</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>AM</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; $stopXMLString = $stopXMLString . "<Stop>"; $stopXMLString = $stopXMLString . "</Stop>"; $stopXMLString = $stopXMLString . "</Stops>"; // if($DEBUG) // echo "<h3>".trim($addr)." Address is not valid"."</h3><br/>"; $stopDataString = "0:0:0:0"; } else { $arrBusStops = array(); for ($i = 0; $i < $rowsnum; $i++) { $row = mysql_fetch_row($result); //echo $row[0]; $dist = distance($addrLat, $addrLong, $row[1], $row[2], "K"); $BDS = new BusDataStructure($row[0], $row[1], $row[2], $dist); array_push($arrBusStops, $BDS); //echo distance($addrLat, $addrLong, $row[1],$row[2], "K") . " kilometers<br>"; //$map->addMarkerByCoords($row[2],$row[1],$row[0].distance($addrLat, $addrLong, $row[1],$row[2], "K"),'',''); } // now do the comparison of the data //sort the stops in the order of some preference $tempSortedArray = BubbleSort($arrBusStops, $rowsnum); // this is the place to do One more level of filtering based on the number of buses $sortedArray = applyFilterForAddress($tempSortedArray); //print_r($sortedArray); $log->LogDebug($logString . ". Valid Address found via internet"); $stopXMLString = $stopXMLString . "<Info>Address Found via Internet</Info>"; $formattedPlace = preg_replace('/Bangalore, Karnataka, India$/', '', $place); $formattedPlaceRemovingTrailingComma = rtrim(trim($formattedPlace), ","); $stopXMLString = $stopXMLString . "<InternetAddress>" . $formattedPlaceRemovingTrailingComma . "</InternetAddress>"; $stopXMLString = $stopXMLString . "<ErrorCode>IA</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; for ($i = 0; $i < sizeof($sortedArray); $i++) { //echo $sortedArray[$i]->getStopName().$sortedArray[$i]->getDistance()."<br/>"; $stopXMLString = $stopXMLString . "<Stop>"; //$map->addMarkerByCoords($sortedArray[$i]->getLongitude(),$sortedArray[$i]->getLatitude(),$sortedArray[$i]->getStopName().$sortedArray[$i]->getDistance(),getBusesForStop($sortedArray[$i]->getStopName()),''); $stopXMLString = $stopXMLString . "<Name>" . htmlentities($sortedArray[$i]->getStopName()) . "</Name>"; $stopXMLString = $stopXMLString . "<Latitude>" . $sortedArray[$i]->getLatitude() . "</Latitude>"; $stopXMLString = $stopXMLString . "<Longitude>" . $sortedArray[$i]->getLongitude() . "</Longitude>"; $stopXMLString = $stopXMLString . "<Distance>" . $sortedArray[$i]->getDistance() . "</Distance>"; $stopXMLString = $stopXMLString . "<Buses>" . getBusesForStop($sortedArray[$i]->getStopName()) . "</Buses>"; $stopXMLString = $stopXMLString . "</Stop>"; } $stopXMLString = $stopXMLString . "</Stops>"; $stopDataString = $sortedArray[0]->getStopName() . ":" . $sortedArray[0]->getLatitude() . ":" . $sortedArray[0]->getLongitude() . ":" . $sortedArray[0]->getDistance(); } } } else { if ($rowsnum > 1) { $stopXMLString = $stopXMLString . "<Info>More than one matching address found in road database. Kindly add some more specifics</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>MA</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; $stopXMLString = $stopXMLString . "<Stop>"; $stopXMLString = $stopXMLString . "</Stop>"; $stopXMLString = $stopXMLString . "</Stops>"; // if($DEBUG) // echo "More than one matching address found in road database. Kindly add some more specifics"; $stopDataString = "m:m:m:m"; } else { // if($DEBUG) // echo "Found in the road database"."<br/>"; // we found the address in th road data base but unfortunately all the stops are more than KM . // this issue will not be there after we have the pegging of the stops. // in the first sql itself we will know the stop that is meant for this road address $log->LogDebug("[" . $mediaType . "] The address " . $addr . " found in the road database "); $row = mysql_fetch_row($result); $addrLat = $row[3]; $addrLong = $row[4]; $stopNumber = $row[5]; $stopName = $row[6]; $vicinityDistance = $row[7]; $originalRequestedLatitude = $addrLat; $originalRequestedLongitude = $addrLong; //get the latutude/logitude of the stop $sqlStop = "Select * from Stops where SNo='" . $stopNumber . "'"; $resultStop = mysql_query($sqlStop); $rowStop = mysql_fetch_row($resultStop); $stopLat = $rowStop[2]; $stopLon = $rowStop[3]; $stopXMLString = $stopXMLString . "<Info>Address Found in the Road Database</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>RA</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; $stopXMLString = $stopXMLString . "<Stop>"; //$map->addMarkerByCoords($sortedArray[$i]->getLongitude(),$sortedArray[$i]->getLatitude(),$sortedArray[$i]->getStopName().$sortedArray[$i]->getDistance(),getBusesForStop($sortedArray[$i]->getStopName()),''); $stopXMLString = $stopXMLString . "<Name>" . htmlentities($stopName) . "</Name>"; $stopXMLString = $stopXMLString . "<Latitude>" . $stopLat . "</Latitude>"; $stopXMLString = $stopXMLString . "<Longitude>" . $stopLon . "</Longitude>"; $stopXMLString = $stopXMLString . "<Distance>" . $vicinityDistance . "</Distance>"; $stopXMLString = $stopXMLString . "<Buses>" . getBusesForStop($stopName) . "</Buses>"; $stopXMLString = $stopXMLString . "</Stop>"; $stopXMLString = $stopXMLString . "</Stops>"; $stopDataString = $stopName . ":" . $stopLat . ":" . $stopLon . ":" . $vicinityDistance; //echo $addrLat; //$map->addMarkerByCoords($addrLong,$addrLat,$addr,'',''); /*$query="SELECT StopName, Latitude, Longitude FROM Stops WHERE (Latitude - ".$addrLat." < .009) AND (Latitude - ".$addrLat." > - .009) AND (Longitude - ".$addrLong." > - .009) AND (Longitude - ".$addrLong." < 0.009)"; //echo $query."<br/>"; $result= mysql_query($query); $rowsnum = mysql_num_rows($result); if($rowsnum==0) { $stopXMLString=$stopXMLString."<Info>All stops are more then 1 km far</Info>"; $stopXMLString=$stopXMLString."<ErrorCode>KM</ErrorCode>"; $stopXMLString=$stopXMLString."<Stops>"; $stopXMLString=$stopXMLString."<Stop>"; $stopXMLString=$stopXMLString."</Stop>"; $stopXMLString=$stopXMLString."</Stops>"; //echo "All stops are more then 1 km far"; } else { // we should try to show nearest 5 at the max // one way is to create a array of datastructure and then sort them on the basis of distance. // also find the buses for the finalised stops $arrBusStops= array(); $stopXMLString=$stopXMLString."<Info>Address Found in the Road Database</Info>"; $stopXMLString=$stopXMLString."<ErrorCode>RA</ErrorCode>"; for($i=0;$i<$rowsnum;$i++) { $row=mysql_fetch_row($result); $dist=distance($addrLat, $addrLong, $row[1],$row[2], "K"); $BDS= new BusDataStructure($row[0],$row[1],$row[2],$dist); array_push($arrBusStops,$BDS); } // now do the comparison of the data $tempSortedArray=BubbleSort($arrBusStops,$rowsnum); // this is the place to do One more level of filtering based on the number of buses $sortedArray=applyFilterForAddress($tempSortedArray); //print_r($sortedArray); $stopXMLString=$stopXMLString."<Stops>"; for($i=0;$i<sizeof($sortedArray);$i++) { //echo $sortedArray[$i]->getStopName().$sortedArray[$i]->getDistance()."<br/>"; $stopXMLString=$stopXMLString."<Stop>"; //$map->addMarkerByCoords($sortedArray[$i]->getLongitude(),$sortedArray[$i]->getLatitude(),$sortedArray[$i]->getStopName().$sortedArray[$i]->getDistance(),getBusesForStop($sortedArray[$i]->getStopName()),''); $stopXMLString=$stopXMLString."<Name>".htmlentities($sortedArray[$i]->getStopName())."</Name>"; $stopXMLString=$stopXMLString."<Latitude>".$sortedArray[$i]->getLatitude()."</Latitude>"; $stopXMLString=$stopXMLString."<Longitude>".$sortedArray[$i]->getLongitude()."</Longitude>"; $stopXMLString=$stopXMLString."<Distance>".$sortedArray[$i]->getDistance()."</Distance>"; $stopXMLString=$stopXMLString."<Buses>".getBusesForStop($sortedArray[$i]->getStopName())."</Buses>"; $stopXMLString=$stopXMLString."</Stop>"; } $stopXMLString=$stopXMLString."</Stops>"; $stopDataString=$sortedArray[0]->getStopName().":".$sortedArray[0]->getLatitude().":".$sortedArray[0]->getLongitude().":".$sortedArray[0]->getDistance(); }*/ } } } } $stopXMLString = $stopXMLString . "<Result>"; list($BusStop, $BusLatitude, $BusLongitude, $BusOffset) = explode(":", $stopDataString); $stopXMLString = $stopXMLString . "<BusStop>" . htmlentities($BusStop) . "</BusStop>"; $stopXMLString = $stopXMLString . "<BusStopLatitude>" . $BusLatitude . "</BusStopLatitude>"; $stopXMLString = $stopXMLString . "<BusStopLongitude>" . $BusLongitude . "</BusStopLongitude>"; $stopXMLString = $stopXMLString . "<Offset>" . $BusOffset . "</Offset>"; $stopXMLString = $stopXMLString . "<Buses>" . getBusesForStopWithFrequency($BusStop) . "</Buses>"; $stopXMLString = $stopXMLString . "<OriginalStopLatitude>" . $originalRequestedLatitude . "</OriginalStopLatitude>"; $stopXMLString = $stopXMLString . "<OriginalStopLongitude>" . $originalRequestedLongitude . "</OriginalStopLongitude>"; $stopXMLString = $stopXMLString . "</Result>"; $stopXMLString = $stopXMLString . "</Address>"; return $stopXMLString; }
/** The xml should be <Address> <Value></Value> <Info></Info> <Stops> <Stop> <Name></Name> <Latitude></Latitude> <Longitude></Longitude> <Distance></Distance> <Buses></Buses> </Stop> . . </Stops> <Result> <BusStop></BusStop> <BusStopLatitude></BusStopLatitude> <BusStopLongitude></BusStopLongitude> <Offset></Offset> </Result> </Address> **/ function getStopForAddress($addr, $log) { //echo $addr; $stopDataString = ''; $originalRequestedLatitude = 0; $originalRequestedLongitude = 0; // create a xml string $stopXMLString = '<Address>'; $query = "Select StopName, Latitude, Longitude from Stops Where StopName LIKE '" . $addr . "%'"; $result = mysql_query($query); $rowsnum = mysql_num_rows($result); if ($rowsnum > 1) { if ($DEBUG) { echo "more than one stops are found with your search criteria <br/>"; } $log->LogDebug("The address " . $addr . " matches more than one in stops table. taking the first one "); $stopXMLString = $stopXMLString . "<Info>More than one stops are found with your search criteria</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>MS</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; // this is the case wehre we can check which is the best choice in terms of buses coming thourgh..E.g. Marathahalli $maxBus = 0; for ($i = 0; $i < $rowsnum; $i++) { $row = mysql_fetch_row($result); $stopXMLString = $stopXMLString . "<Stop>"; if ($DEBUG) { echo $row[0] . "<br/>"; } $stopXMLString = $stopXMLString . "<Name>" . htmlentities($row[0]) . "</Name>"; $stopXMLString = $stopXMLString . "<Latitude>" . $row[1] . "</Latitude>"; $stopXMLString = $stopXMLString . "<Longitude>" . $row[2] . "</Longitude>"; $stopXMLString = $stopXMLString . "<Distance>-1</Distance>"; $stopXMLString = $stopXMLString . "<Buses>" . getBusesForStop($row[0]) . "</Buses>"; // $stopDetails=$row[0]; //$map->addMarkerByCoords($row[2],$row[1],$row[0],getBusesForStop($row[0]),''); $NumberOfBus = getNumberOfBusesForStop($row[0]); if ($NumberOfBus > $maxBus) { $maxBus = $NumberOfBus; $stopDataString = $row[0] . ":" . $row[1] . ":" . $row[2] . ":0"; } $stopXMLString = $stopXMLString . "</Stop>"; } $stopXMLString = $stopXMLString . "</Stops>"; } else { if ($rowsnum == 1) { $stopXMLString = $stopXMLString . "<Info>Your address matches the correct stop name</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>OS</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; $stopXMLString = $stopXMLString . "<Stop>"; $row = mysql_fetch_row($result); if ($DEBUG) { echo " Your stop is " . $row[0] . "<br/>"; } $log->LogDebug("The address " . $addr . " is a valid stopname "); $stopXMLString = $stopXMLString . "<Name>" . htmlentities($row[0]) . "</Name>"; $stopXMLString = $stopXMLString . "<Latitude>" . $row[1] . "</Latitude>"; $stopXMLString = $stopXMLString . "<Longitude>" . $row[2] . "</Longitude>"; $stopXMLString = $stopXMLString . "<Distance>-1</Distance>"; $stopXMLString = $stopXMLString . "<Buses>" . getBusesForStop($row[0]) . "</Buses>"; $stopXMLString = $stopXMLString . "</Stop>"; // $map->addMarkerByCoords($row[2],$row[1],$row[0],getBusesForStop($row[0]),''); $stopDataString = $row[0] . ":" . $row[1] . ":" . $row[2] . ":0"; $stopXMLString = $stopXMLString . "</Stops>"; } else { if ($rowsnum == 0) { //echo "going to the roads database"."<br/>"; // Checking in the road database $query = "Select * from RoadAddresses Where Address ='" . $addr . "'"; $result = mysql_query($query); $rowsnum = mysql_num_rows($result); if ($rowsnum == 0) { if ($DEBUG) { echo "The address not found in the database so fetching from internet <br/>"; } //$stopXMLString=$stopXMLString."<Info>The address ".$addr." not found in the database so fetching from internet</Info>"; $log->LogDebug("The address " . $addr . " not found in the database so fetching from internet "); // fimd from the net $addressString = "http://maps.google.com/maps/api/geocode/json?address=" . urlencode($addr) . ",+Bangalore,+Karnataka,+India&sensor=false"; $geocode = file_get_contents($addressString); //echo $geocode; $formattedAddress = return_between($geocode, "formatted_address", "\",", EXCL); $formattedAddressNoiseRemoved = return_between($formattedAddress, ":", "India", INCL); $place = substr($formattedAddressNoiseRemoved, 3); // echo $place."<br/>"; ///echo $place."<br/>"; $arr = array(); $arr = split(",", $place); if (strcmp(trim($arr[0]), "Bengaluru") == 0 && strcmp(trim($arr[1]), "Karnataka") == 0 && strcmp(trim($arr[2]), "India") == 0) { $stopXMLString = $stopXMLString . "<Info>Address is not valid</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>AM</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; $stopXMLString = $stopXMLString . "<Stop>"; $stopXMLString = $stopXMLString . "</Stop>"; $stopXMLString = $stopXMLString . "</Stops>"; if ($DEBUG) { echo "<h3>" . trim($roadName) . " Address is not valid" . "</h3><br/>"; } $stopDataString = "0:0:0:0"; } else { $locations = return_between($geocode, "location", "}", EXCL); //echo $locations; $latitude = return_between($locations, "lat\"", ",", EXCL); $latitude = substr($latitude, 3); //echo $latitude; list($lat, $long) = split(",", $locations); list($cap, $val) = split(":", $long); //echo trim($val); $addrLat = trim($latitude); $addrLong = trim($val); $originalRequestedLatitude = $addrLat; $originalRequestedLongitude = $addrLong; // add the marker for the searched address //$map->addMarkerIcon("marker_star.png","marker_shadow.png",15,29,15,3); //$map->addMarkerByCoords($addrLong,$addrLat,$addr,'',''); $query = "SELECT StopName, Latitude, Longitude FROM Stops WHERE (Latitude - " . $addrLat . " < .009) AND (Latitude - " . $addrLat . " > - .009) AND (Longitude - " . $addrLong . " > - .009) AND (Longitude - " . $addrLong . " < 0.009)"; //echo $query."<br/>"; $result = mysql_query($query); $rowsnum = mysql_num_rows($result); if ($rowsnum == 0) { // this is the case when you gave an address that even could not be found usign the internet search $stopXMLString = $stopXMLString . "<Info>Address is not valid</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>AM</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; $stopXMLString = $stopXMLString . "<Stop>"; $stopXMLString = $stopXMLString . "</Stop>"; $stopXMLString = $stopXMLString . "</Stops>"; if ($DEBUG) { echo "<h3>" . trim($roadName) . " Address is not valid" . "</h3><br/>"; } $stopDataString = "0:0:0:0"; } else { $arrBusStops = array(); for ($i = 0; $i < $rowsnum; $i++) { $row = mysql_fetch_row($result); //echo $row[0]; $dist = distance($addrLat, $addrLong, $row[1], $row[2], "K"); $BDS = new BusDataStructure($row[0], $row[1], $row[2], $dist); array_push($arrBusStops, $BDS); //echo distance($addrLat, $addrLong, $row[1],$row[2], "K") . " kilometers<br>"; //$map->addMarkerByCoords($row[2],$row[1],$row[0].distance($addrLat, $addrLong, $row[1],$row[2], "K"),'',''); } // now do the comparison of the data $tempSortedArray = BubbleSort($arrBusStops, $rowsnum); // this is the place to do One more level of filtering based on the number of buses $sortedArray = applyFilterForAddress($tempSortedArray); //print_r($sortedArray); $stopXMLString = $stopXMLString . "<Info>Address Found via Internet</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>IA</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; for ($i = 0; $i < sizeof($sortedArray); $i++) { //echo $sortedArray[$i]->getStopName().$sortedArray[$i]->getDistance()."<br/>"; $stopXMLString = $stopXMLString . "<Stop>"; //$map->addMarkerByCoords($sortedArray[$i]->getLongitude(),$sortedArray[$i]->getLatitude(),$sortedArray[$i]->getStopName().$sortedArray[$i]->getDistance(),getBusesForStop($sortedArray[$i]->getStopName()),''); $stopXMLString = $stopXMLString . "<Name>" . htmlentities($sortedArray[$i]->getStopName()) . "</Name>"; $stopXMLString = $stopXMLString . "<Latitude>" . $sortedArray[$i]->getLatitude() . "</Latitude>"; $stopXMLString = $stopXMLString . "<Longitude>" . $sortedArray[$i]->getLongitude() . "</Longitude>"; $stopXMLString = $stopXMLString . "<Distance>" . $sortedArray[$i]->getDistance() . "</Distance>"; $stopXMLString = $stopXMLString . "<Buses>" . getBusesForStop($sortedArray[$i]->getStopName()) . "</Buses>"; $stopXMLString = $stopXMLString . "</Stop>"; } $stopXMLString = $stopXMLString . "</Stops>"; $stopDataString = $sortedArray[0]->getStopName() . ":" . $sortedArray[0]->getLatitude() . ":" . $sortedArray[0]->getLongitude() . ":" . $sortedArray[0]->getDistance(); } } } else { if ($rowsnum > 1) { $stopXMLString = $stopXMLString . "<Info>More than one matching address found in road database. Kindly add some more specifics</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>MA</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; $stopXMLString = $stopXMLString . "<Stop>"; $stopXMLString = $stopXMLString . "</Stop>"; $stopXMLString = $stopXMLString . "</Stops>"; if ($DEBUG) { echo "More than one matching address found in road database. Kindly add some more specifics"; } $stopDataString = "m:m:m:m"; } else { if ($DEBUG) { echo "Found in the road database" . "<br/>"; } $log->LogDebug("The address " . $addr . " found in the road database "); $row = mysql_fetch_row($result); $addrLat = $row[3]; $addrLong = $row[4]; $originalRequestedLatitude = $addrLat; $originalRequestedLongitude = $addrLong; //echo $addrLat; //$map->addMarkerByCoords($addrLong,$addrLat,$addr,'',''); $query = "SELECT StopName, Latitude, Longitude FROM Stops WHERE (Latitude - " . $addrLat . " < .009) AND (Latitude - " . $addrLat . " > - .009) AND (Longitude - " . $addrLong . " > - .009) AND (Longitude - " . $addrLong . " < 0.009)"; //echo $query."<br/>"; $result = mysql_query($query); $rowsnum = mysql_num_rows($result); if ($rowsnum == 0) { $stopXMLString = $stopXMLString . "<Info>All stops are more then 1 km far</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>KM</ErrorCode>"; $stopXMLString = $stopXMLString . "<Stops>"; $stopXMLString = $stopXMLString . "<Stop>"; $stopXMLString = $stopXMLString . "</Stop>"; $stopXMLString = $stopXMLString . "</Stops>"; //echo "All stops are more then 1 km far"; } else { // we should try to show nearest 5 at the max // one way is to create a array of datastructure and then sort them on the basis of distance. // also find the buses for the finalised stops $arrBusStops = array(); $stopXMLString = $stopXMLString . "<Info>Address Found in the Road Database</Info>"; $stopXMLString = $stopXMLString . "<ErrorCode>RA</ErrorCode>"; for ($i = 0; $i < $rowsnum; $i++) { $row = mysql_fetch_row($result); $dist = distance($addrLat, $addrLong, $row[1], $row[2], "K"); $BDS = new BusDataStructure($row[0], $row[1], $row[2], $dist); array_push($arrBusStops, $BDS); } // now do the comparison of the data $tempSortedArray = BubbleSort($arrBusStops, $rowsnum); // this is the place to do One more level of filtering based on the number of buses $sortedArray = applyFilterForAddress($tempSortedArray); //print_r($sortedArray); $stopXMLString = $stopXMLString . "<Stops>"; for ($i = 0; $i < sizeof($sortedArray); $i++) { //echo $sortedArray[$i]->getStopName().$sortedArray[$i]->getDistance()."<br/>"; $stopXMLString = $stopXMLString . "<Stop>"; //$map->addMarkerByCoords($sortedArray[$i]->getLongitude(),$sortedArray[$i]->getLatitude(),$sortedArray[$i]->getStopName().$sortedArray[$i]->getDistance(),getBusesForStop($sortedArray[$i]->getStopName()),''); $stopXMLString = $stopXMLString . "<Name>" . htmlentities($sortedArray[$i]->getStopName()) . "</Name>"; $stopXMLString = $stopXMLString . "<Latitude>" . $sortedArray[$i]->getLatitude() . "</Latitude>"; $stopXMLString = $stopXMLString . "<Longitude>" . $sortedArray[$i]->getLongitude() . "</Longitude>"; $stopXMLString = $stopXMLString . "<Distance>" . $sortedArray[$i]->getDistance() . "</Distance>"; $stopXMLString = $stopXMLString . "<Buses>" . getBusesForStop($sortedArray[$i]->getStopName()) . "</Buses>"; $stopXMLString = $stopXMLString . "</Stop>"; } $stopXMLString = $stopXMLString . "</Stops>"; $stopDataString = $sortedArray[0]->getStopName() . ":" . $sortedArray[0]->getLatitude() . ":" . $sortedArray[0]->getLongitude() . ":" . $sortedArray[0]->getDistance(); } } } } } } $stopXMLString = $stopXMLString . "<Result>"; list($BusStop, $BusLatitude, $BusLongitude, $BusOffset) = split(":", $stopDataString); $stopXMLString = $stopXMLString . "<BusStop>" . htmlentities($BusStop) . "</BusStop>"; $stopXMLString = $stopXMLString . "<BusStopLatitude>" . $BusLatitude . "</BusStopLatitude>"; $stopXMLString = $stopXMLString . "<BusStopLongitude>" . $BusLongitude . "</BusStopLongitude>"; $stopXMLString = $stopXMLString . "<Offset>" . $BusOffset . "</Offset>"; $stopXMLString = $stopXMLString . "<Buses>" . getBusesForStop($BusStop) . "</Buses>"; $stopXMLString = $stopXMLString . "<OriginalStopLatitude>" . $originalRequestedLatitude . "</OriginalStopLatitude>"; $stopXMLString = $stopXMLString . "<OriginalStopLongitude>" . $originalRequestedLongitude . "</OriginalStopLongitude>"; $stopXMLString = $stopXMLString . "</Result>"; $stopXMLString = $stopXMLString . "</Address>"; return $stopXMLString; }