Soil-heavy metals are potentially harmful to the ecosystem and human health. Quantifying heavy metals sources is conducive to pollution control. In this study, 64 surface-soil samples were collected in Handan city. Cr, Mn, Ni, Cu, Zn, Cd and Pb were determined; then, their spatial distribution in the sampling area was drawn by ArcGIS. The pollution index (PI) method, geo-accumulation index (Igeo) method, Nemerow integrated pollution index (NIPI) and pollution load index (PLI) were used to evaluate the pollution level of heavy metals in surface soil; then, an ecological and health risk assessment of soil-heavy metals was carried out. Combined with the spatial distribution, correlation analysis, cluster analysis, PCA and PMF model, the pollution sources of heavy metals in soil were identified and apportioned. The results showed that the average content of Cd was nearly ten times that of the background limit, which was the most serious among the studied metals. In terms of non-carcinogenic risk, Cr had the highest value, followed by Pb. In terms of carcinogenic risk, Cd, Cr, and Ni had an acceptable or tolerable risk. Three pollution sources were identified by cluster analysis and PCA, including traffic sources with Cu, Pb and Cd as main loads, industrial sources with Mn, Cd and Zn as main loads, and natural sources with Cr and Ni as main loads. The PMF model analyzed three main factors: traffic source (17.61%), natural source (28.62%) and industrial source (53.77%). The source categories and the main load elements obtained from the source apportionment results were consistent with the source identification results.