def METHOD_NAME():
    for row in data:
        if '_meta' in row:
            # not a real data row
            metadata.update(row['_meta'])
            continue
        geo = row[geo_col]
        if geo is None:
            continue
        e = geo
        depth = 0
        while hasattr(e, '__iter__'):
            e = e[0]
            depth += 1
        if depth < 2:
            if depth == 0:
                geo = _parse_geopoint(geo)
                if geo is None:
                    continue
            feature_type = 'Point'
        else:
            if depth == 2:
                geo = [geo]
                depth += 1
            feature_type = 'MultiPolygon' if depth == 4 else 'Polygon'
        properties = dict((k, v) for k, v in row.items() if k != geo_col)
        # handle 'display value / raw value' fields (for backwards compatibility with
        # existing data sources)
        # note: this is not ideal for the maps report, as we have no idea how to properly
        # format legends; it's better to use a formatter function in the maps report config
        display_props = {}
        for k, v in properties.items():
            if isinstance(v, dict) and set(v.keys()) == set(('html', 'sort_key')):
                properties[k] = v['sort_key']
                display_props['__disp_%s' % k] = v['html']
        properties.update(display_props)
        yield {
            'type': 'Feature',
            'geometry': {
                'type': feature_type,
                'coordinates': geo,
            },
            'properties': properties,
        }