def populate_intersections(*args, **kwargs): # On average, there are 2.3 blocks per intersection. So for # example in the case of Chicago, where there are 788,496 blocks, # we'd expect to see approximately 340,000 intersections logger.info("Starting to populate intersections") metro = get_metro() zipcodes = Location.objects.filter(location_type__name__istartswith="zip").exclude(name__startswith='Unknown') def lookup_zipcode(pt): for zipcode in zipcodes: if zipcode.location.contains(pt): return zipcode intersections_seen = {} for i in Intersection.objects.all(): intersections_seen[i.pretty_name] = i.id intersections_seen[i.reverse_pretty_name()] = i.id for bi in BlockIntersection.objects.iterator(): street_name = make_dir_street_name(bi.block) i_street_name = make_dir_street_name(bi.intersecting_block) # This tuple enables us to skip over intersections # we've already seen. Since intersections are # symmetrical---eg., "N. Kimball Ave. & W. Diversey # Ave." == "W. Diversey Ave. & N. Kimball Ave."---we # use both orderings. seen_intersection = (u"%s & %s" % (street_name, i_street_name), u"%s & %s" % (i_street_name, street_name)) if seen_intersection[0] not in intersections_seen and \ seen_intersection[1] not in intersections_seen: if bi.block.left_city != bi.block.right_city: city = metro['city_name'].upper() else: city = bi.block.left_city if bi.block.left_state != bi.block.right_state: state = metro['state'].upper() else: state = bi.block.left_state if (bi.block.left_zip != bi.block.right_zip or \ bi.intersecting_block.left_zip != bi.intersecting_block.right_zip) or \ (bi.block.left_zip != bi.intersecting_block.left_zip): zipcode_obj = lookup_zipcode(bi.location) if zipcode_obj: zipcode = zipcode_obj.name else: zipcode = bi.block.left_zip else: zipcode = bi.block.left_zip intersection = intersection_from_blocks(bi.block, bi.intersecting_block, bi.location, city, state, zipcode) intersection.save() logging.debug("Created intersection %s" % intersection) bi.intersection = intersection bi.save() intersections_seen[seen_intersection[0]] = intersection.id intersections_seen[seen_intersection[1]] = intersection.id else: if not bi.intersection: bi.intersection_id = intersections_seen[seen_intersection[0]] bi.save() logger.debug("Already seen intersection %s" % " / ".join(seen_intersection)) logger.info("Finished populating intersections")
def populate_intersections(*args, **kwargs): # On average, there are 2.3 blocks per intersection. So for # example in the case of Chicago, where there are 788,496 blocks, # we'd expect to see approximately 340,000 intersections logging.info("Starting to populate intersections") metro = get_metro() zipcodes = Location.objects.filter(location_type__name__istartswith="zip").exclude(name__startswith='Unknown') def lookup_zipcode(pt): for zipcode in zipcodes: if zipcode.location.contains(pt): return zipcode intersections_seen = {} for i in Intersection.objects.all(): intersections_seen[i.pretty_name] = i.id intersections_seen[i.reverse_pretty_name()] = i.id for bi in BlockIntersection.objects.iterator(): street_name = make_dir_street_name(bi.block) i_street_name = make_dir_street_name(bi.intersecting_block) # This tuple enables us to skip over intersections # we've already seen. Since intersections are # symmetrical---eg., "N. Kimball Ave. & W. Diversey # Ave." == "W. Diversey Ave. & N. Kimball Ave."---we # use both orderings. seen_intersection = (u"%s & %s" % (street_name, i_street_name), u"%s & %s" % (i_street_name, street_name)) if seen_intersection[0] not in intersections_seen and \ seen_intersection[1] not in intersections_seen: if bi.block.left_city != bi.block.right_city: city = metro['city_name'].upper() else: city = bi.block.left_city if bi.block.left_state != bi.block.right_state: state = metro['state'].upper() else: state = bi.block.left_state if (bi.block.left_zip != bi.block.right_zip or \ bi.intersecting_block.left_zip != bi.intersecting_block.right_zip) or \ (bi.block.left_zip != bi.intersecting_block.left_zip): zipcode_obj = lookup_zipcode(bi.location) if zipcode_obj: zipcode = zipcode_obj.name else: zipcode = bi.block.left_zip else: zipcode = bi.block.left_zip intersection = intersection_from_blocks(bi.block, bi.intersecting_block, bi.location, city, state, zipcode) intersection.save() logging.debug("Created intersection %s" % intersection) bi.intersection = intersection bi.save() intersections_seen[seen_intersection[0]] = intersection.id intersections_seen[seen_intersection[1]] = intersection.id else: if not bi.intersection: bi.intersection_id = intersections_seen[seen_intersection[0]] bi.save() logging.debug("Already seen intersection %s" % " / ".join(seen_intersection)) logging.info("Finished populating intersections")
def populate_intersections(*args, **kwargs): # On average, there are 2.3 blocks per intersection. So for # example in the case of Chicago, where there are 788,496 blocks, # we'd expect to see approximately 340,000 intersections # NOTE, we can't do a delete here because that cascades to BlockIntersection, # and then we have nothing to work with. # So the two functions should really always be called together. logger.info( "Starting to populate intersections, this can take some minutes...") logger.warn("Deleting all %d existing intersections first" % Intersection.objects.all().count()) Intersection.objects.all().delete() logger.info("We have %d blockintersections" % BlockIntersection.objects.all().count()) metro = get_metro() zipcodes = Location.objects.filter( location_type__name__istartswith="zip").exclude( name__startswith='Unknown') def lookup_zipcode(pt): for zipcode in zipcodes: if zipcode.location.contains(pt): return zipcode intersections_seen = {} for i in Intersection.objects.all(): intersections_seen[i.pretty_name] = i.id intersections_seen[i.reverse_pretty_name()] = i.id for bi in BlockIntersection.objects.iterator(): street_name = make_dir_street_name(bi.block) i_street_name = make_dir_street_name(bi.intersecting_block) # This tuple enables us to skip over intersections # we've already seen. Since intersections are # symmetrical---eg., "N. Kimball Ave. & W. Diversey # Ave." == "W. Diversey Ave. & N. Kimball Ave."---we # use both orderings. seen_intersection = (u"%s & %s" % (street_name, i_street_name), u"%s & %s" % (i_street_name, street_name)) if seen_intersection[0] not in intersections_seen and \ seen_intersection[1] not in intersections_seen: if bi.block.left_city != bi.block.right_city: # If we have Locations representing cities, # find one that contains this bi's center. from ebpub.db.models import get_city_locations overlapping_cities = get_city_locations().filter( location__contains=bi.location) if overlapping_cities: city = overlapping_cities[0].name.upper() else: city = metro['city_name'].upper() else: city = bi.block.left_city if bi.block.left_state != bi.block.right_state: state = metro['state'].upper() else: state = bi.block.left_state if (bi.block.left_zip != bi.block.right_zip or \ bi.intersecting_block.left_zip != bi.intersecting_block.right_zip) or \ (bi.block.left_zip != bi.intersecting_block.left_zip): zipcode_obj = lookup_zipcode(bi.location) if zipcode_obj: zipcode = zipcode_obj.name else: zipcode = bi.block.left_zip else: zipcode = bi.block.left_zip intersection = intersection_from_blocks(bi.block, bi.intersecting_block, bi.location, city, state, zipcode) intersection.save() logger.debug("Created intersection %s" % intersection.pretty_name) bi.intersection = intersection bi.save() intersections_seen[seen_intersection[0]] = intersection.id intersections_seen[seen_intersection[1]] = intersection.id else: if not bi.intersection: bi.intersection_id = intersections_seen[seen_intersection[0]] bi.save() logger.debug("Already seen intersection %s" % " / ".join(seen_intersection)) logger.info("Finished populating intersections") total = Intersection.objects.all().count() if not total: logger.warn( "No intersections created, maybe you forgot to do populate_block_intersections first?" ) return total
def populate_intersections(*args, **kwargs): # On average, there are 2.3 blocks per intersection. So for # example in the case of Chicago, where there are 788,496 blocks, # we'd expect to see approximately 340,000 intersections # NOTE, we can't do a delete here because that cascades to BlockIntersection, # and then we have nothing to work with. # So the two functions should really always be called together. logger.info("Starting to populate intersections, this can take some minutes...") logger.warn("Deleting all %d existing intersections first" % Intersection.objects.all().count()) Intersection.objects.all().delete() logger.info("We have %d blockintersections" % BlockIntersection.objects.all().count()) metro = get_metro() zipcodes = Location.objects.filter(location_type__name__istartswith="zip").exclude(name__startswith='Unknown') def lookup_zipcode(pt): for zipcode in zipcodes: if zipcode.location.contains(pt): return zipcode intersections_seen = {} for i in Intersection.objects.all(): intersections_seen[i.pretty_name] = i.id intersections_seen[i.reverse_pretty_name()] = i.id for bi in BlockIntersection.objects.iterator(): street_name = make_dir_street_name(bi.block) i_street_name = make_dir_street_name(bi.intersecting_block) # This tuple enables us to skip over intersections # we've already seen. Since intersections are # symmetrical---eg., "N. Kimball Ave. & W. Diversey # Ave." == "W. Diversey Ave. & N. Kimball Ave."---we # use both orderings. seen_intersection = (u"%s & %s" % (street_name, i_street_name), u"%s & %s" % (i_street_name, street_name)) if seen_intersection[0] not in intersections_seen and \ seen_intersection[1] not in intersections_seen: if bi.block.left_city != bi.block.right_city: # If we have Locations representing cities, # find one that contains this bi's center. from ebpub.db.models import get_city_locations overlapping_cities = get_city_locations().filter(location__contains=bi.location) if overlapping_cities: city = overlapping_cities[0].name.upper() else: city = metro['city_name'].upper() else: city = bi.block.left_city if bi.block.left_state != bi.block.right_state: state = metro['state'].upper() else: state = bi.block.left_state if (bi.block.left_zip != bi.block.right_zip or \ bi.intersecting_block.left_zip != bi.intersecting_block.right_zip) or \ (bi.block.left_zip != bi.intersecting_block.left_zip): zipcode_obj = lookup_zipcode(bi.location) if zipcode_obj: zipcode = zipcode_obj.name else: zipcode = bi.block.left_zip else: zipcode = bi.block.left_zip intersection = intersection_from_blocks(bi.block, bi.intersecting_block, bi.location, city, state, zipcode) intersection.save() logger.debug("Created intersection %s" % intersection.pretty_name) bi.intersection = intersection bi.save() intersections_seen[seen_intersection[0]] = intersection.id intersections_seen[seen_intersection[1]] = intersection.id else: if not bi.intersection: bi.intersection_id = intersections_seen[seen_intersection[0]] bi.save() logger.debug("Already seen intersection %s" % " / ".join(seen_intersection)) logger.info("Finished populating intersections") total = Intersection.objects.all().count() if not total: logger.warn("No intersections created, maybe you forgot to do populate_block_intersections first?") return total