def filter_geo(self, address_list, limit=10): geobox = self.get_argument_geobox(default=None) latlon = self.get_argument_latlon("latlon", None) if geobox: return Address.filter_geobox(address_list, geobox), geobox, latlon # Find geobox around the center that includes at least 10 matches if not latlon: lookup = self.get_argument("lookup", None) if lookup: latlon = geo.geocode(lookup) if not latlon: self.messages.append(("WARNING", "Could not find address: '%s'." % lookup)) if not latlon: return address_list.limit(limit), geobox, latlon address_list_2 = Address.order_distance(address_list, latlon) address_list_2 = address_list_2.limit(limit) max_dist = Address.max_distance( self.orm, address_list_2, latlon[0], latlon[1]) max_dist *= 1.1 scale = Address.scale(latlon[0]) values = ( latlon[0] - max_dist, latlon[0] + max_dist, max(latlon[1] - max_dist / max(scale, 0.01), -180), min(latlon[1] + max_dist / max(scale, 0.01), 180), ) geobox = dict(zip(["latmin", "latmax", "lonmin", "lonmax"], values)) return Address.filter_geobox(address_list, geobox), geobox, latlon