2010-10-13 16:05:17 +00:00
|
|
|
==============================
|
|
|
|
django-zipdistance
|
|
|
|
==============================
|
|
|
|
|
|
|
|
django-zipdistance is a simple application to find the distance
|
|
|
|
between any two zip codes. The fixture provided with this application
|
|
|
|
is derived from the Year 2000 Zip Code Tabulation Area (ZCTA) tables
|
|
|
|
provided by the US Census Bureau. The Census Bureau notes:
|
|
|
|
|
|
|
|
ZCTAs are generalized area representations of U.S. Postal Service
|
|
|
|
(USPS) ZIP Code service areas. In most instances the ZCTA code
|
|
|
|
equals the ZIP Code for an area. Some ZIP Codes represent very
|
|
|
|
few addresses (sometimes only one) and therefore will not appear
|
|
|
|
in the ZCTA database. ZCTA is a trademark of the U.S. Census
|
|
|
|
Bureau; ZIP Code is a registered trademark of the U.S. Postal
|
|
|
|
Service.
|
|
|
|
|
|
|
|
In short, the ZCTAs most likely, but are not guaranteed to, correspond
|
|
|
|
with ZIP Codes for any given address. In testing, this database
|
|
|
|
proved to be entirely acceptable for most of the United States. But
|
|
|
|
just to make sure, I repeat: THE SOFTWARE AND DATA FILES ARE PROVIDED
|
|
|
|
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
|
|
|
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
|
|
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
|
|
|
|
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
|
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
|
|
OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
|
|
|
|
-----------------------------
|
|
|
|
Standard Usage:
|
|
|
|
|
|
|
|
Find all the zipcodes within 50 miles:
|
|
|
|
|
2010-10-13 16:20:49 +00:00
|
|
|
from zipdistance.models import ZipDistance
|
|
|
|
target = ZipDistance.objects.get(zipcode = zip_form.cleaned_data['zipcode1'].strip())
|
|
|
|
zips = ZipDistance.objects.distance_from(target, 50)
|
2010-10-13 16:05:17 +00:00
|
|
|
|
|
|
|
Find the distance between two zipcodes:
|
|
|
|
|
2010-10-13 16:20:49 +00:00
|
|
|
from zipdistance.models import ZipDistance
|
|
|
|
zip1 = ZipDistance.objects.get(zipcode = zip_form.cleaned_data['zipcode1'].strip())
|
|
|
|
zip2 = ZipDistance.objects.get(zipcode = zip_form.cleaned_data['zipcode1'].strip())
|
2010-10-13 16:05:17 +00:00
|
|
|
zip1.distance_between(zip_2)
|
|
|
|
|
|
|
|
Find all the stores within a given distance.
|
|
|
|
|
2010-10-13 16:20:49 +00:00
|
|
|
from zipdistance.models import ZipDistance
|
|
|
|
from yourapp.models import Store
|
|
|
|
zips = ZipDistance.objects.distance_from(target, 50)
|
2010-10-13 16:05:17 +00:00
|
|
|
stores = Store.objects.get(zipcode__in = [z.zipcode for z in zips])
|
|
|
|
|
|
|
|
That last one's not terribly efficient. If you used the ZipMap as a
|
|
|
|
way of storing zipcodes, you could probably come up with something
|
|
|
|
smarter.
|
|
|
|
|