Location: PHPKode > scripts > AzDGZIP > azdgzip/ZIPLocator.php
<?php
############################################################
# \-\-\-\-\-\-\     AzDG  - S C R I P T S    /-/-/-/-/-/-/ #
############################################################
# Written by              AzDG (hide@address.com)          #
# Created 23/04/07        Last Modified 23/04/07           #
# Scripts Home:           http://www.azdg.com              #
############################################################
# File name               ZIPLocator.php                   #
# File purpose            Class for ZIP distance count     #
# File created by         AzDG <hide@address.com>          #
############################################################
# Idea from http://www.sanisoft.com "zipLocator" algorithm
# License LGPL
############################################################

class ZIPLocator
{
	var $Table;
	var $Round = '2';
	function ZIPLocator($Table)
	{
		$this->Table = $Table;
	}
	
	function cb($ss)
	{
		# Security on incoming data - never believe to anyone :)
		# Don`t check for intval(), because zip codes can be also a non-numeric!
		return trim(htmlspecialchars(stripslashes($ss)));
	}

	function distance($zip1,$zip2)
	{
		$lat = $lon = array();
		$tmp = mysql_query('SELECT * FROM '.$this->Table.' WHERE zipcode IN ('.$this->cb($zip1).','.$this->cb($zip2).')');
		$cnt = mysql_num_rows($tmp);
		if($cnt < 2)
		{
			return "One or both Zip Codes not found";
		}
		else
		{
			while($i = mysql_fetch_array($tmp))
			{
				$lat[] = $i['lat'];
				$lon[] = $i['lon'];
			}

			$lat[0] = $this->deg_to_rad($lat[0]);
			$lon[0]  = $this->deg_to_rad($lon[0]);
			$lat[1]  = $this->deg_to_rad($lat[1]);
			$lon[1]  = $this->deg_to_rad($lon[1]);

			$delta_lat = $lat[1] - $lat[0];
			$delta_lon = $lon[1] - $lon[0];

			$temp = pow(sin($delta_lat/2.0),2) + cos($lat[0]) * cos($lat[1]) * pow(sin($delta_lon/2.0),2);

			$EARTH_RADIUS = 3956;
			$distance = $EARTH_RADIUS * 2 * atan2(sqrt($temp),sqrt(1-$temp));

			return round($distance,$this->Round);
		}

	}

	function deg_to_rad($deg)
	{
		$radians = 0.0;
		$radians = $deg * M_PI/180.0;
		return($radians);
	}


	function inradius($zip,$radius)
	{
		$lat = $lon = '';$zips = array();
		$tmp = mysql_query('SELECT * FROM '.$this->Table.' WHERE zipcode = '.$this->cb($zip));
		$cnt = mysql_num_rows($tmp);
		if(!$tmp)
		{
			return "Zip Code not found";
		}
		else
		{
			while($i = mysql_fetch_array($tmp))
			{
				$lat = $i['lat'];
				$lon = $i['lon'];
			}
			$tmp2 = mysql_query('SELECT zipcode FROM '.$this->Table.' WHERE (POW((69.1*(lon-'.$this->cb($lon).')*cos('.$this->cb($lat).'/57.3)),2)+POW((69.1*(lat-'.$this->cb($lat).')),2))<('.$this->cb($radius).'*'.$this->cb($radius).')');
			$cnt2 = mysql_num_rows($tmp2);
			if($cnt2)
			{
				while($i = mysql_fetch_array($tmp2))
				{
					$zips[]=$i['zipcode'];
				}
			}
			else
			{
				return "Zip Code not found";
			}
			return $zips;
		}

	}
}
?>
Return current item: AzDGZIP