$zipcode ORDER BY dist") or die(mysql_error()); if(mysql_num_rows($q)) { $i=1; while($r=mysql_fetch_row($q)) { $a[$i]["zip"] = $r[0]; $a[$i]["city"] = $r[1]; $a[$i]["country"] = $r[2]; $a[$i]["state"] = $r[3]; $a[$i]["latitude"] = $r[4]; $a[$i]["longitude"] = $r[5]; $a[$i]["distance"] = $r[6]; $i++; } return $a; } else { echo "Sorry! No result found!"; exit; } } else { echo "Invalid zip code!"; exit; } } ///////////////////////////////////////////////////////////////////Radius Search function RadiusSearch($zipcode,$distance,$unit) // zip code, distance (KM), units(0 for miles, 1 for KM) { global $set; $q=mysql_query("SELECT zip,city,county,state,Latitude,Longitude,sinlat,coslat,lonrad FROM $set[db_table] WHERE zip=$zipcode") or die(mysql_error()); if(mysql_num_rows($q)) { $r=mysql_fetch_array($q); $a[0]["zip"] = $r[0]; $a[0]["city"] = $r[1]; $a[0]["country"] = $r[2]; $a[0]["state"] = $r[3]; $a[0]["latitude"] = $r[4]; $a[0]["longitude"] = $r[5]; $a[0]["distance"] = 0; if ($unit==0) { $cosd = "3963.1676*acos(sinlat*$r[sinlat]+coslat*$r[coslat]*cos(lonrad-$r[lonrad]))"; } else { $cosd = "6378.1*acos(sinlat*$r[sinlat]+coslat*$r[coslat]*cos(lonrad-$r[lonrad]))"; } $q=mysql_query("SELECT zip, city, county, state, latitude, longitude, ROUND($cosd, 1) AS dist FROM $set[db_table] WHERE $cosd <= $distance and zip<>$zipcode ORDER BY dist") or die(mysql_error()); if(mysql_num_rows($q)) { $i=1; while($r=mysql_fetch_row($q)) { $a[$i]["zip"] = $r[0]; $a[$i]["city"] = $r[1]; $a[$i]["country"] = $r[2]; $a[$i]["state"] = $r[3]; $a[$i]["latitude"] = $r[4]; $a[$i]["longitude"] = $r[5]; $a[$i]["distance"] = $r[6]; $i++; } return $a; } else { echo "Sorry! No result found!"; exit; } } else { echo "Invalid zip code!"; exit; } } ///////////////////////////////////////////////////////////////////Radius Search Aprox. but much faster function RadiusSearchA($zipcode,$distance,$unit) // zip code, distance (KM), units(0 for miles, 1 for KM) { global $set; $q=mysql_query("SELECT zip,city,county,state,Latitude,Longitude,sinlat,sinlon,coslat,coslon,lonrad FROM $set[db_table] WHERE zip=$zipcode") or die(mysql_error()); if(mysql_num_rows($q)) { $r=mysql_fetch_array($q); $a[0]["zip"] = $r[0]; $a[0]["city"] = $r[1]; $a[0]["country"] = $r[2]; $a[0]["state"] = $r[3]; $a[0]["latitude"] = $r[4]; $a[0]["longitude"] = $r[5]; $a[0]["distance"] = 0; # $mx["sinlat"] = $r[6]; # $mx["sinlon"] = $r[7]; # $mx["coslat"] = $r[8]; # $mx["coslon"] = $r[9]; # $mx["lonrad"] = $r[10]; /////////////// approximate, but much faster if ($unit==0) { $cosd = "3963.2*acos(sinlat*$r[sinlat]+coslat*$r[coslat]*cos(lonrad-$r[lonrad]))"; $iRadius = $distance; } else { $cosd = "6378.1*acos(sinlat*$r[sinlat]+coslat*$r[coslat]*cos(lonrad-$r[lonrad]))"; $iRadius = $distance*0.6213712; } $LatRange = $iRadius/69.05; $LongRange = $iRadius/(cos($r[4]*0.0174533)*69.05); $LowLatitude = $r[4] - $LatRange; $HighLatitude = $r[4] + $LatRange; $LowLongitude = $r[5] - $LongRange; $HighLongitude = $r[5] + $LongRange; //////////// $q=mysql_query("SELECT zip, city, county, state, latitude, longitude, ROUND($cosd, 1) AS dist,sinlat,coslat,lonrad FROM $set[db_table] WHERE Latitude > $LowLatitude and Latitude < $HighLatitude and Longitude > $LowLongitude and Longitude < $HighLongitude and zip<>$zipcode ORDER BY dist") or die(mysql_error()); if(mysql_num_rows($q)) { $i=1; while($r=mysql_fetch_row($q)) { if($r[6]<=$distance){ $a[$i]["zip"] = $r[0]; $a[$i]["city"] = $r[1]; $a[$i]["country"] = $r[2]; $a[$i]["state"] = $r[3]; $a[$i]["latitude"] = $r[4]; $a[$i]["longitude"] = $r[5]; $a[$i]["distance"] = $r[6]; // another way to compute the distance # $a[$i]["distance"] = DistanceInt($r[6], $mx["sinlat"], $r[7], $mx["coslat"], $r[8], $mx["lonrad"], $unit); $i++; } } return $a; } else { echo "Sorry! No result found!"; exit; } } else { echo "Invalid zip code!"; exit; } } /////////////////////////////////////////////////////////////////// Distance between 2 ZIP codes function Distance($zip1, $zip2, $unit) { global $set; $q=mysql_query("SELECT city,county,state,sinlat,coslat,lonrad FROM $set[db_table] WHERE zip=$zip1 or zip=$zip2") or die(mysql_error()); if(mysql_num_rows($q)) { $i =1; while($r=mysql_fetch_row($q)) { $z[$i] = $r; $i++; } } if ($unit == 0) { return (rad2deg(acos($z[1][3] * $z[2][3] + $z[1][4] * $z[2][4] * cos($z[1][5] -$z[2][5])))*69.05); } else { return (rad2deg(acos($z[1][3] * $z[2][3] + $z[1][4] * $z[2][4] * cos($z[1][5] -$z[2][5])))*111.1); } } /////////////////////////////////////////////////////////////////// Internal distance between 2 places function DistanceInt($sinlat1, $sinlat2, $coslat1, $coslat2, $lonrad1, $lonrad2, $unit) { if ($unit == 0) { return (rad2deg(acos($sinlat1 * $sinlat2 + $coslat1 * $coslat2 * cos($lonrad1 - $lonrad2)))*69.05); } else { return (rad2deg(acos($sinlat1 * $sinlat2 + $coslat1 * $coslat2 * cos($lonrad1 - $lonrad2)))*111.1); } } /////////////////////////////////////////////////////////////////// if(!trim($_POST[zipcode])) $mess.="- zip code is required
"; elseif(!is_numeric($_POST[zipcode])) $mess.="- zip code must be a number
"; if(!trim($_POST[distance])) $mess.="- radius distance is required
"; elseif(!is_numeric($_POST[distance])) $mess.="- radius distance must be a number
"; mysql_connect($db_Hostname, $db_UserName, $db_Password) || die("Can't Connect to Database: ".mysql_error()); mysql_select_db($db_Database); if(trim($mess)) { echo "

$mess

"; SelectSearchData(); } else { //speed measurement $starttime = explode(" ",microtime()); $starttime = $starttime[1] + $starttime[0]; // RadiusSearch_old($_POST[zipcode],$_POST[distance],$_POST[unit]); //speed measurement $endtime = explode(" ",microtime()); $endtime = $endtime[1] + $endtime[0]; $totaltime = round(($endtime - $starttime)*1000,3); echo "Radius Search - Zip codes found in ".$totaltime." ms"; // //speed measurement $starttime = explode(" ",microtime()); $starttime = $starttime[1] + $starttime[0]; // RadiusSearch($_POST[zipcode],$_POST[distance],$_POST[unit]); //speed measurement $endtime = explode(" ",microtime()); $endtime = $endtime[1] + $endtime[0]; $totaltime = round(($endtime - $starttime)*1000,3); echo "
Web4Future Optimized Radius Search - Zip codes found in ".$totaltime." ms"; // //speed measurement $starttime = explode(" ",microtime()); $starttime = $starttime[1] + $starttime[0]; // $z=RadiusSearchA($_POST[zipcode],$_POST[distance],$_POST[unit]); //speed measurement $endtime = explode(" ",microtime()); $endtime = $endtime[1] + $endtime[0]; $totaltime = round(($endtime - $starttime)*1000,3); echo "
Web4Future Optimized Approximated Radius Search - Zip codes found in ".$totaltime." ms"; // $tot = count($z); if ($_POST[unit]== 0) { $_POST[unit] = "miles"; } else { $_POST[unit] = "KM"; } $a.=""; $a.=" "; if(is_array($z) && $tot) { $a.=""; for ($i=1;$i "; } } echo $a."
Your Coordinates
zip city state latitude logitude
".sprintf("%05d",$z[0]["zip"])." ".$z[0]["city"]." ".$z[0]["state"]." ".$z[0]["latitude"]." ".$z[0]["longitude"]."
Distance up to $_POST[distance] $_POST[unit] found ".($tot-1)." zip codes
zip distance city state latitude logitude
".sprintf("%05d",$z[$i]["zip"])." ".$z[$i]["distance"]." $_POST[unit] ".$z[$i]["city"]." ".$z[$i]["state"]." ".$z[$i]["latitude"]." ".$z[$i]["longitude"]."
"; } ///////////////////////////////////////////////////////////////////1 function SelectSearchData() { global $zipcode,$distance,$set; ?>
Zip Search
Zip code:
Distance: