First, we all get randomly assigned a schedule with our rotation order. There are a few exceptions to this...basically if you have a pressing, prescheduled thing that you need to have your break/research block during, you can file for that ahead of time.
Then everyone decides that all of the other schedules are better and we all try to trade around with each other.
Then you rank your site preferences for each rotation. Before that rotation begins, they try to give everyone their preference, but can't always. They wait a few weeks for everyone to trade around again, and then figure out final rosters.
It sounds complicated, but it really isn't. We have more than enough spots at our main clinical campuses that it's not a big deal. We're only really choosing between 2-3 sites, total, and the same 2-3 for every single rotation. The farthest location away from us is a 20-30min drive, the rest are <5min from med school campus.