I need to be able to print out the correct zipcodes that meet the thresh hold criteria, i can filter through them and operate on them, but the last step is to print which zipcodes are within 50miles of the center one. here is my code
import sys
import csv
import math
dicts = {}
origin =[]
#methods to convert to radians
def getLatRad(latitude):
return float(latitude) * (math.pi/180.0)
def getLongRad(longitude):
return float(longitude) * (math.pi/180.0)
#method to find which zipcodes are within thresh
def getnearbylist(center, thresh, ziplist):
try:
f = open("zips.csv")
csvParser = csv.reader(f)
for row in csvParser:
zipcode= row[0].strip()
latitude= row[2].replace('"', '').strip()
longitude=row[3].replace('"', '').strip()
dicts[zipcode] = {'zipcode':zipcode,'latitude': latitude, 'longitude':longitude}
if center in dicts:
origin=dicts[center]
longRad2= getLongRad(origin['longitude'])
latRad2= getLatRad(origin['latitude'])
matched = {match: dicts[match] for match in ziplist if match in dicts}
for x in matched:
longRad1= getLongRad(matched[x]['longitude'])
latRad1= getLatRad(matched[x]['latitude'])
dlon = longRad2 - longRad1
dlat = latRad2 - latRad1
a = math.sin(dlat/2)**2 + math.cos(latRad1) * math.cos(latRad2) * math.sin(dlon/2)**2
c = 2 * math.asin(math.sqrt(a))
m = 3960 * c
if m <thresh: # cant figure out how to return zipcodes instead of m value
print m
except ValueError:
pass
def main():
center = '12601' # Our center zipcode
thresh = 50 # We are looking for zipcodes within 50 miles
ziplist = ['12481', '10001', '12203', '10303', '12561'] # Our test list
nearbylist = getnearbylist(center, thresh, ziplist) # Call the function
print nearbylist
if __name__ == '__main__':
main()
so instead of printing m, i want to return the zipcodes thanks!
You need to capture the zips found to be nearby.
#capture the nearby zips in a new dict
near_zips={}
for x in matched:
longRad1= getLongRad(matched[x]['longitude'])
latRad1= getLatRad(matched[x]['latitude'])
dlon = longRad2 - longRad1
dlat = latRad2 - latRad1
a = math.sin(dlat/2)**2 + math.cos(latRad1) * math.cos(latRad2) * math.sin(dlon/2)**2
c = 2 * math.asin(math.sqrt(a))
m = 3960 * c
if m <thresh: # cant figure out how to return zipcodes instead of m value
#add the nearby zipcodes to the dict
print '%f < %f' % (m,thresh)
print 'adding %s to near_zips' % (x,)
near_zips[x] = matched[x]
#return the nearby zips
return near_zips
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.