def choose_poi_and_neighbors(gdf, placekey, neighbor_radius, projection = 'EPSG:3857'):
    """
    Identifies the "target" POI and its nearby neighbors, based on the `neighbor_radius` parameter (by default expressed in meters).
    """

    # classify Neighbors v. Target POI
    gdf['POI'] = 'Neighbor'
    gdf.loc[gdf['placekey'] == placekey, 'POI'] = 'Target'
    
    # transform to a projected coordinate reference system
    gdf_proj = gdf.to_crs(projection)
    
    # get the buffer for filtering neighbors
    target = gdf_proj.loc[gdf_proj['POI'] == 'Target']
    target_buffer = target.geometry.buffer(neighbor_radius)
    
    # find the neighbors
    output_proj = gdf_proj.loc[gdf_proj.intersects(target_buffer.unary_union)]
    
    # transform back to original coordinate reference system
    output = output_proj.to_crs(gdf.crs)
    
    return output