Global navigation satellite system (GNSS) positioning in dense urban areas remains a challenge due to the signal reflection by buildings, namely multipath and non-line-of-sight (NLOS) reception. These effects degrade the performance of low-cost GNSS receivers such as in those smartphones. An effective three-dimensional (3D) mapping aided GNSS positioning method is proposed to correct the NLOS error. Instead of applying ray-tracing simulation, the signal reflection points are detected based on a skyplot with the surrounding building boundaries. The measurements of the direct and reflected signals can thus be simulated and further used to determine the user's position based on the measurement likelihood between real measurements. Verified with real experiments, the proposed algorithm is able to reduce the computational load greatly while maintaining a positioning accuracy within 10 metres of error in dense urban environments, compared with the conventional method of ray-tracing based NLOS corrected positioning.