def calculate_intersect(a, b, dist):
    """
    Calculate the count of destinations from the official and the OSM dataset that intersect with different buffer.

    Parameters
    ----------
    a : geopandas.GeoDataFrame
        the osm or offical destinations
    b : geopandas.GeoDataFrame
        the osm or offical destinations
    dist : int
        buffer distance in meters

    Returns
    -------
    a_buff_prop, b_buff_prop
        the proportion of buffered a destinations that intersect with a buffered b destinations,
        the proportion of buffered b destinations that intersect with a buffered a destinations
    """

    # focus on the geography of each gdf
    a_geography = a["geometry"]
    b_geography = b["geometry"]

    # buffer each by the current distance
    a_buff = a_geography.buffer(dist)
    b_buff = b_geography.buffer(dist)

    # take the unary union of each's buffered geometry
    a_buff_unary = a_buff.unary_union
    b_buff_unary = b_buff.unary_union

    # create a list of the destinations that intersect between datasets
    a_buff_overlap = []
    for dest in a_buff:
        if dest.intersects(b_buff_unary):
            a_buff_overlap.append(dest)

    b_buff_overlap = []
    for dest in b_buff:
        if dest.intersects(a_buff_unary):
            b_buff_overlap.append(dest)

    # find the proportion of destinations that intersect between datasets out of total destination
    a_buff_prop = len(a_buff_overlap) / len(a_geography)
    b_buff_prop = len(b_buff_overlap) / len(a_geography)

    return a_buff_prop, b_buff_prop