Miasto położone jest nad rzeką Rokitką, która znajduje się w dorzeczu Noteci, we wschodniej części Krajny, u granic Krajeńskiego Parku Krajobrazowego, w pasie Pojezierza Południowopomorskiego (w tym Pojezierza Krajeńskiego), w odległości 42 km na północny zachód od Bydgoszczy