code: def mapper_metro(self, _, data):
          
          # OSM POI record
          if 'tags' in data:
              type_tag = 1
              lonlat = data['coordinates']
              payload = data['tags']
          # Tweet with coordinates from Streaming API
          elif 'user_id' in data:
              type_tag = 2
              # only allow tweets from the listed domains to try and filter out
              # noise such as HR tweets, Weather reports and news updates
              accept = [
                  "twitter\.com",
                  "foursquare\.com",
                  "instagram\.com",
                  "untappd\.com"
              ]
              expr = "|".join(accept)
              if not re.findall(expr, data['source']):
                  return
              lonlat = data['lonlat']
              payload = None
          # spatial lookup using Rtree with cached results
          metro = self.lookup.get(lonlat, METRO_DISTANCE)
          if not metro:
              return
          yield metro, (type_tag, lonlat, payload)
docs: map each osm POI and geotweets based on spatial lookup of metro area