Jump to content

ZipCode along with cities and state (distance calculations)


2levelsabove

Recommended Posts

So I have not had a chance to research this yet but was just posting this out there for my fellow developers to help me a little bit.

 

Where can I get the most updated database from ? Also any libraries or code samples that let you do that ?

 

 

I know I am being lazy but just wanted your thoughts on it.

 

 

Thanks !!

given a table of zip codes with lat and lon for each, and where $_GET['zipsearch'] is the target and $_GET['radius'] is the distance in miles:

 

@$zipsearch = $_GET['zipsearch'];
@$radius = $_GET['radius'];
$dif = '2';
$results='';
$data=array();

//if(!empty($zipsearch)){}

$query = "select * from zips where zip = '$zipsearch' LIMIT 1";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);

if(empty($row)){$results = "<tr><td align='center' class='results' style='font-size:16px;font-weight:bold;color:red;font-family:arial;'>Invalid zip code</td></tr>";}

$lat = $row['lat'];$lon = $row['lon'];

$lat1 = ($lat + $dif);
$lat2 = ($lat - $dif);
$lon1 = ($lon + $dif);
$lon2 = ($lon - $dif);

$query = "select * from zips where zips.lat < $lat1 AND zips.lat > $lat2 AND zips.lon < $lon1 AND zips.lon > $lon2";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)){
$dist = great_circle_distance($lat,$row['lat'],$lon,$row['lon']);
if ($dist < $radius){
    	array_unshift($row,$dist);
	$row[0]=round($row[0],2);
	$data[] = $row;
}
}

sort($data); // $data now has the zip codes and distances in increasing order of distance from $_GET['zipsearch'];

function great_circle_distance($lat1,$lat2,$lon1,$lon2){
	/* Convert all the degrees to radians */
	$lat1 = deg_to_rad($lat1);
	$lon1 = deg_to_rad($lon1);
	$lat2 = deg_to_rad($lat2);
	$lon2 = deg_to_rad($lon2);

	/* Find the deltas */
	$delta_lat = $lat2 - $lat1;
	$delta_lon = $lon2 - $lon1;

	/* Find the Great Circle distance */
	$temp = pow(sin($delta_lat/2.0),2) + cos($lat1) * cos($lat2) * pow(sin($delta_lon/2.0),2);

	$EARTH_RADIUS = 3956;

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

	return $distance;
}

function deg_to_rad($deg){
	$radians = 0.0;

	$radians = $deg * M_PI/180.0;

	return($radians);
}

 

zip code databases are plentiful.

If this is a database driven application, you could also calculate the distance in the database query given the point of origin long/lat. and that every other destination has a long/lat.

 

Check it out:

http://maurus.net/resources/distance-queries/

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.