On Monday 22 January 2007 9:39 am, Urb LeJeune wrote:

> >There are 8 Zip codes withing a 5 miles radius of 05701
> >They are:
> >05251 Dorset, VT 0.85 miles
> >05701 Rutland, VT 0.00 miles
> >05702 Rutland, VT 0.00 miles
> >05736 Center Rutland, VT 2.59 miles
> >05744 Florence, VT 3.57 miles
> >05759 North Clarendon, VT 2.13 miles
> >05765 Proctor, VT 4.57 miles
> >05777 West Rutland, VT 3.57 miles
> >
> >Dorset is a lot more than 0.85 miles.  It's really about 25 street
> > miles.
>
>          The program uses longevity and latitude from a commercial zip
> code database. It calculates the great circle distance between two sets
> of coordinates. The supplied coordinates could be wrong for Dorset or
> Rutland. Do the airline distances to the other locations seem
> reasonable?

You almost certainly want to use the Haversine formula for this task 
(calculating distances to points that are quite close on a sphere).

http://en.wikipedia.org/wiki/Great-circle_distance

The basic Great Circle formula gives *incorrect* results for points that are 
very close to each other.  I.E., the zip code 05702 is NOT actually on top 
of 05701, and I expect that your database of zip code centroids is fine, 
however, at some point roundoff error is killing you.  That is,

arccos(1) = 0       //true!
arccos(.999999999) = 0   //true for computers, not true for mathematicians

So zip 05702 is too close to zip 05701, and its arccos is getting rounded to 
zero, which makes the distance calculated be zero, which is untrue.

Use one of the other formulas on that Wikipedia page.

Michael Sims

_______________________________________________
New York PHP Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk

NYPHPCon 2006 Presentations Online
http://www.nyphpcon.com

Show Your Participation in New York PHP
http://www.nyphp.org/show_participation.php

Reply via email to