$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 "| 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"]." | "; } } echo $a."