Login   Register  
PHP Classes
elePHPant
Icontem

File: ZIPLocator.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of AzDG  >  AzDGZIP  >  ZIPLocator.php  >  Download  
File: ZIPLocator.php
Role: Class source
Content type: text/plain
Description: Class
Class: AzDGZIP
Lookup United States zip codes in a MySQL database
Author: By
Last change:
Date: 2007-04-22 14:09
Size: 3,015 bytes
 

Contents

Class file image Download
<?php
############################################################
# \-\-\-\-\-\-\     AzDG  - S C R I P T S    /-/-/-/-/-/-/ #
############################################################
# Written by              AzDG (support@azdg.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 <support@azdg.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 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;
        }

    }
}
?>