Indoor positioning without GPS is one of the most important problems in indoor pedestrian navigation. In this paper, we propose an accurate indoor positioning algorithm using a particle filter based on a floormap, where we use the proximity of the Bluetooth beacons as well as acceleration and geomagnetic sensors. In designing the likelihood function in the particle filter, we effectively use the proximity of the Bluetooth beacons, which just gives rough distance to the target beacon but more stable than conventional RSSI-based distance estimation. In addition to that, by effectively utilizing a floormap, the accumulated positioning errors due to the acceleration and geomagnetic sensors are much reduced. Moreover, when the radio waves from the Bluetooth beacons are blocked by obstacles, we can also take it into account in designing the likelihood function in the particle filter. Experimental results demonstrate that our algorithm can reduce the indoor positioning errors by up to 79% compared to several conventional algorithms.