All pastes #718951 Raw Edit

Mine

public text v1 · immutable
#718951 ·published 2007-09-28 20:29 UTC
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'>&nbsp;</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>
			&nbsp; &nbsp; 
			<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 
}
?>