| 
<?php
############################################################
 # \-\-\-\-\-\-\     AzDG  - S C R I P T S    /-/-/-/-/-/-/ #
 ############################################################
 # Written by              AzDG ([email protected])          #
 # 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 <[email protected]>          #
 ############################################################
 # 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;
 }
 
 }
 }
 ?>
 |