Пример #1
0
    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
Пример #2
0
 def geo_address_query(self):
     query = self.orm.query(Address)
     geobox = self.get_geobox()
     return Address.filter_geobox(query, geobox)