the_title
filter takes two parameters, one of them is the ID of the post for which it was called. Something like that should work.
add_filter( 'the_title', 'se385007_title_filter', 20, 2 );
function se385007_title_filter( $title, $post_id )
{
$new_title = str_replace( "[geo_name]", "[geo_name post_id=$post_id]", $title );
return do_shortcode( $new_title );
)