def METHOD_NAME(self, lon, lat, strict=True):
    """
    Given a longitude and latitude, finds the corresponding hazard model
    in the global mosaic.
    :param lon:
        The site longitude
    :param lat:
        The site latitude
    :param strict:
         If True (the default) raise an error, otherwise log an error
    """
    t0 = time.time()
    lon = float(lon)
    lat = float(lat)
    point = Point(lon, lat)
    # # If we prefer to make a point-in-polygon search:
    # models = []
    with fiona.open(self.shapefile_path, 'r') as shp:
        # # If we prefer to make a point-in-polygon search:
        # models.extend([polygon['properties']['code']
        #                for polygon in shp
        #                if point.within(shape(polygon['geometry']))])
        # NOTE: poly.distance(point) returns 0.0 if point is within poly
        #       To calculate the distance to the nearest edge, one would do
        #       poly.exterior.distance(point) instead
        model_dist = {
            polygon['properties']['code']:
                shape(polygon['geometry']).distance(point)
            for polygon in shp
        }
    close_models = {
        model: model_dist[model]
        for model in model_dist
        if model_dist[model] < CLOSE_DIST_THRESHOLD
    }
    num_close_models = len(close_models)
    if num_close_models < 1:
        if strict:
            raise ValueError(
                f'Site at lon={lon} lat={lat} is not covered by any'
                f' model!')
        else:
            logging.error(
                f'Site at lon={lon} lat={lat} is not covered by any'
                f' model!')
            model = None
    elif num_close_models > 1:
        model = min(close_models, key=close_models.get)
        logging.warning(
            f'Site at lon={lon} lat={lat} is on the border between more'
            f' than one model: {close_models}. Using {model}')
    else:  # only one close model was found
        model = list(close_models)[0]
        logging.info(
            f'Site at lon={lon} lat={lat} is covered by model {model}'
            f' (distance: {model_dist[model]})')
    logging.debug(f'Model search took {time.time() - t0} seconds')
    return model