В теории то, но у меня не получается реализовать через него запрос(
Вот этот запрос он читает
df = osm.query_osm('relation', poly, recurse='down', tags='route')
потом мне нужно полученное отфильтровать по тегу 'route', pandas говорит, что такого нет. Решил задать фильтр в запросе (костыльно, но я не придумал по другому), выдаёт ошибку.
df = osm.query_osm('relation', city['geometry'][0], recurse='down', tags=['route=bus','route=tram','route=subway','route=trolleybus'])
Ну если основной смысл это не создавать файлы в ФС, то можно накидать функцию, которая будет трогать overpass и результат выдавать строкой, похожей на geojson, потом из неё делать StringIO (или что там geopandas читает в оригинале, pandas хочет StringIO).
Хотя можно в /tmp/ класть временный файл, а после удалять (я надеюсь /tmp/ в RAM у тебя в системе)