def METHOD_NAME(self,
              geojson: dict,
              crs_transformer: Optional['CRSTransformer'] = None) -> dict:
    """Add class_id to feature properties and drop features with no class.
    For each feature in geojson, the class_id is inferred and is set into
    feature['properties']. If the class_id is None (because none of the
    rules apply and the default_class_id is None), the feature is dropped.
    """
    new_features = []
    warned = False
    for feature in geojson['features']:
        class_id = self.infer_feature_class_id(
            feature,
            default_class_id=self.default_class_id,
            class_config=self.class_config,
            class_id_to_filter=self.class_id_to_filter)
        if class_id is not None:
            feature = deepcopy(feature)
            properties = feature.get('properties', {})
            properties['class_id'] = class_id
            feature['properties'] = properties
            new_features.append(feature)
        elif not warned:
            log.warning(
                'ClassInferenceTransformer is dropping vector features because '
                'class_id cannot be inferred. To avoid this behavior, '
                'set default_class_id to a non-None value in '
                'ClassInferenceTransformer.')
            warned = True
    new_geojson = features_to_geojson(new_features)
    return new_geojson