Intra-urban human mobility is investigated by means of taxi trajectory data that are collected in Shanghai, China, where taxis play an important role in urban transportation. From the taxi trajectories, approximately 1.5 million trips of anonymous customers are extracted on seven consecutive days. The globally spatio-temporal patterns of trips exhibit a significant daily regularity. Since each trip can be viewed as a displacement in the random walk model, the distributions of the distance and direction of the extracted trips are investigated in this research. The direction distribution shows an NEE–SWW-dominant direction, and the distance distribution can be well fitted by an exponentially truncated power law, with the scaling exponent $β$ = 1.2 textpm 0.15. The observed patterns are attributed to the geographical heterogeneity of the study area, which makes the spatial distribution of trajectory stops to be non-uniform. We thus construct a model that integrates both the geographical heterogeneity and distance decay effect, to interpret the observed patterns. Our Monte Carlo simulation results closely match to the observed patterns and thus validate the proposed model. According to the proposed model, in a single-core urban area, the geographical heterogeneity and distance decay effect improve each other when influencing human mobility patterns. Geographical heterogeneity leads to a faster observed decay, and the distance decay effect makes the spatial distribution of trips more concentrated.