<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def mapper_metro(self, _, data):
 """ map each osm POI and geotweets based on spatial lookup of metro area """

        # 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)