def calc_geo_branches_in_buffer(node, mv_grid, radius, radius_inc, proj):
    """ Determines branches in nodes' associated graph that are at least partly
    within buffer of `radius` from `node`.
    
    If there are no nodes, the buffer is successively extended by `radius_inc`
    until nodes are found.

    Parameters
    ----------
    node : LVStationDing0, GeneratorDing0, or CableDistributorDing0
        origin node (e.g. LVStationDing0 object) with associated shapely object
        (attribute `geo_data`) in any CRS (e.g. WGS84)
    radius : float
        buffer radius in m
    radius_inc : float
        radius increment in m
    proj : int
        pyproj projection object: nodes' CRS to equidistant CRS
        (e.g. WGS84 -> ETRS)

    Returns
    -------
    :any:`list` of :networkx:`NetworkX Graph Obj< >`
        List of branches (NetworkX branch objects)

    """

    branches = []

    while not branches:
        node_shp = transform(proj, node.geo_data)
        buffer_zone_shp = node_shp.buffer(radius)
        for branch in mv_grid.graph_edges():
            nodes = branch['adj_nodes']
            branch_shp = transform(proj, LineString([nodes[0].geo_data, nodes[1].geo_data]))
            if buffer_zone_shp.intersects(branch_shp):
                branches.append(branch)
        radius += radius_inc

    return branches