木津川を挟んで久世郡久御山町、洞ヶ峠を越えて大阪府枚方市に接しており、市の中央を国道1号が南北に貫いている。 国道1号と直交するような形で府道や市道が整備されており、京田辺市とつながっている。 市の西側は淀川で、対岸に京都府乙訓郡大山崎町、大阪府三島郡島本町、大阪府高槻市を眺望できる。 市の北端のかわきた自然運動公園内に、木津川、宇治川、桂川の3川合流点があり、 近くを通る国道478号で大山崎町とつながっている。 鉄道駅は3駅ある。京阪本線の八幡市駅・橋本駅。鋼索線の男山山上駅。