rendered paste body<?php
//Copyright 2005 Web4Future.com All rights reserved
//The database and this code may ONLY be used for a single site
//You may not publish, sell, resell any part of the database or code
//You may not include this code in commercial or freeware projects
//Please contact us for developer licensing at sales@web4future.com
////////////////////////////////////////////////////Radius Search - DO NOT USE THIS FUNCTION IS THE SLOWEST ONE
function RadiusSearch_old($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 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(sin(radians(Latitude))*sin(radians($r[Latitude]))+cos(radians(Latitude))*cos(radians($r[Latitude]))*cos(radians(Longitude)-radians($r[Longitude])))";
} else {
$cosd = "6378.1*acos(sin(radians(Latitude))*sin(radians($r[Latitude]))+cos(radians(Latitude))*cos(radians($r[Latitude]))*cos(radians(Longitude)-radians($r[Longitude])))";
}
$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
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<br>";
elseif(!is_numeric($_POST[zipcode])) $mess.="- zip code must be a number<br>";
if(!trim($_POST[distance])) $mess.="- radius distance is required<br>";
elseif(!is_numeric($_POST[distance])) $mess.="- radius distance must be a number<br>";
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 "<p>$mess</p>";
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 "<font face=verdana size=2>Radius Search - Zip codes found in <b>".$totaltime."</b> ms</font>";
//
//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 "<br><font face=verdana size=2>Web4Future Optimized Radius Search - Zip codes found in <b>".$totaltime."</b> ms</font>";
//
//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 "<br><font face=verdana size=2>Web4Future Optimized Approximated Radius Search - Zip codes found in <b>".$totaltime."</b> ms</font>";
//
$tot = count($z);
if ($_POST[unit]== 0) { $_POST[unit] = "miles"; } else { $_POST[unit] = "KM"; }
$a.="<style>td { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; }</style>";
$a.="<table width='620' border='0' cellspacing='1' cellpadding='4' bgcolor='#CCCCCC' align='center'>
<tr bgColor='#FFFFFF'>
<td align='center' colspan='6'><b>Your Coordinates</b></td>
</tr>
<tr bgColor='#EFEFEF'>
<td colspan='2'><b>zip</b></td>
<td><b>city</b></td>
<td><b>state</b></td>
<td><b>latitude</b></td>
<td><b>logitude</b></td>
</tr>
<tr bgColor='#FFFFFF'>
<td colspan='2'>".sprintf("%05d",$z[0]["zip"])."</td>
<td>".$z[0]["city"]."</td>
<td>".$z[0]["state"]."</td>
<td>".$z[0]["latitude"]."</td>
<td>".$z[0]["longitude"]."</td>
</tr>
<tr bgColor='#FFFFFF'><tdcolspan='6'> </td></tr>
<tr bgColor='#EFEFEF'>
<td align='center' colspan='6'><b>Distance up to $_POST[distance] $_POST[unit] found ".($tot-1)." zip codes</b></td>
</tr>";
if(is_array($z) && $tot) {
$a.="</tr>
<tr bgColor='#EFEFEF'>
<td><b>zip</b></td>
<td><b>distance</b></td>
<td><b>city</b></td>
<td><b>state</b></td>
<td><b>latitude</b></td>
<td><b>logitude</b></td>
</tr>";
for ($i=1;$i<count($z);$i++) {
$a.="<tr bgColor='#FFFFFF' onMouseOver=\"this.bgColor='#FAFAFA'\" onMouseOut=\"this.bgColor='#FFFFFF'\">
<td>".sprintf("%05d",$z[$i]["zip"])."</td>
<td>".$z[$i]["distance"]." $_POST[unit]</td>
<td>".$z[$i]["city"]."</td>
<td>".$z[$i]["state"]."</td>
<td>".$z[$i]["latitude"]."</td>
<td>".$z[$i]["longitude"]."</td>
</tr>";
}
}
echo $a."</table>";
}
///////////////////////////////////////////////////////////////////1
function SelectSearchData()
{
global $zipcode,$distance,$set;
?>
<form name="form1" method="post" action="">
<table width="500" border="0" align="center" cellpadding="4" cellspacing="0">
<tr align="center">
<td colspan="2">Zip Search</td>
</tr>
<tr>
<td width="169" align="right">Zip code:</td>
<td width="315"><input type="text" name="zipcode"></td>
</tr>
<tr>
<td align="right">Distance:</td>
<td>
<select name="distance">
<option>2</option>
<option>5</option>
<option>8</option>
<option>10</option>
</select>
<select name="unit">
<option value='0'>Miles</option>
<option value='1'>KM</option>
</select> </td>
</tr>
<tr>
<td align="center"><input type="reset" name="Reset" value="Reset"></td>
<td align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</form>
<?php
}
?>