Skip to contents

A function to generate palaeocoordinates for fossil occurrence data (i.e. reconstruct the geographic distribution of organisms' remains at time of deposition). Each occurrence is assigned palaeocoordinates based on its current geographic position and age estimate.


  lng = "lng",
  lat = "lat",
  age = "age",
  model = "MERDITH2021",
  method = "point",
  uncertainty = TRUE,
  round = 3



dataframe. Fossil occurrences to be palaeogeographically reconstructed. occdf should contain columns with longitudinal and latitudinal values, as well as age estimates. The age of rotation should be supplied in millions of years before present.


character. The name of the column you wish to be treated as longitude (defaults to "lng").


character. The name of the column you wish to be treated as latitude (defaults to "lat").


character. The name of the column you wish to be treated as the age for rotation (defaults to "age").


character. The name(s) of the plate rotation model(s) to be used to reconstruct palaeocoordinates. See details for available models.


character. Method used to calculate palaeocoordinates for fossil occurrences. Either "grid" to use reconstruction files, or "point" (default) to use the GPlates API service. See details section for specific details.


logical. Should the uncertainty in palaeogeographic reconstructions be returned? If set to TRUE (default), the palaeolatitudinal range and maximum geographic distance (in km) between output palaeocoordinates are calculated. This argument is only relevant if more than one plate rotation model is specified in model.


numeric. Numeric value indicating the number of decimal places lng, lat and age should be rounded to. This functionality is only relevant for the "point" method. Rounding can speed up palaeorotation by reducing the number of unique coordinate pairs. Defaults to a value of 3. If no rounding is desired, set this value to NULL.


A dataframe containing the original input occurrence dataframe and the reconstructed coordinates (i.e. "p_lng", "p_lat"). The "grid" method also returns the age of rotation ("rot_age") and the reference coordinates rotated ("rot_lng" and "rot_lat"). If only one model is requested, a column containing the rotation model used ("rot_model") is also appended. Otherwise, the name of each model is appended to the name of each column containing palaeocoordinates (e.g. "p_lng_GOLONKA"). If uncertainty is set to TRUE, the palaeolatitudinal range ("range_p_lat") and the maximum geographic distance ("max_dist") in km between palaeocoordinates will also be returned (the latter calculated via distGeo).


This function can generate palaeocoordinates using two different approaches (method):

  • Reconstruction files: The "grid" method uses reconstruction files to spatiotemporally link present-day geographic coordinates and age estimates with an equal-area hexagonal grid (spacing = 100 km) rotated to the midpoint of Phanerozoic (0--540 Ma) stratigraphic stages (Geological Time Scale, 2020). The grid was generated using the h3jsr R package and 'h3_resolution' 3 (see h3_info_table). If specific ages of rotation are required, or fine-scale spatial analyses are being conducted, use of the "point" method (see GPlates API below) is recommended (particularly if occurrences are close to plate boundaries). As implemented, when using the "grid" method, coordinates within the same grid cell will be assigned equivalent palaeocoordinates due to spatial aggregation. However, the reconstruction files provide pre-generated palaeocoordinates enabling efficient estimation of the past distribution of fossil occurrences. The reconstruction files along with additional documentation are deposited on Zenodo. Note: each reconstruction file is 5--10 MB in size.

  • GPlates API: The "point" method uses the GPlates Web Service to reconstruct palaeocoordinates for point data. The use of this method is slower than the "grid" method if many unique time intervals exist in your dataset. However, it provides palaeocoordinates with higher precision.

Available models and timespan for each method:

  • "MERDITH2021" (Merdith et al., 2021)

    • 0--540 Ma (grid)

    • 0--1000 Ma (point)

  • "MULLER2016" (Müller et al., 2016)

    • 0--230 Ma (grid/point)

  • "MATTHEWS2016_pmag_ref" (Matthews et al., 2016)

    • 0--410 Ma (grid/point)

  • "SETON2012" (Seton et al., 2012)

    • 0--200 Ma (grid/point)

  • "GOLONKA" (Wright et al., 2013)

    • 0--540 Ma (grid/point)

  • "PALEOMAP" (Scotese & Wright, 2018)

    • 0--540 Ma (grid)

    • 0--750 Ma (point)

Access is also provided for the following mantle reference frame models. However, they are generally not recommended for reconstructing palaeocoordinates.

  • "MULLER2022" (Müller et al., 2022)

    • 0--540 Ma (grid)

    • 0--1000 Ma (point)

  • "MULLER2019" (Müller et al., 2019)

    • 0--250 Ma (grid/point)

  • "MATTHEWS2016_mantle_ref" (Matthews et al., 2016)

    • 0--410 Ma (grid/point)


  • Matthews, K.J., Maloney, K.T., Zahirovic, S., Williams, S.E., Seton, M., and Müller, R.D. (2016). Global plate boundary evolution and kinematics since the late Paleozoic. Global and Planetary Change, 146, 226-250. doi:10.1016/j.gloplacha.2016.10.002 .

  • Merdith, A., Williams, S.E., Collins, A.S., Tetley, M.G., Mulder, J.A., Blades, M.L., Young, A., Armistead, S.E., Cannon, J., Zahirovic, S., Müller. R.D. (2021). Extending full-plate tectonic models into deep time: Linking the Neoproterozoic and the Phanerozoic. Earth-Science Reviews, 214(103477). doi:10.1016/j.earscirev.2020.103477 .

  • Müller, R. D., Flament, N., Cannon, J., Tetley, M. G., Williams, S. E., Cao, X., Bodur, Ö. F., Zahirovic, S., and Merdith, A. (2022). A tectonic-rules-based mantle reference frame since 1 billion years ago – implications for supercontinent cycles and plate–mantle system evolution, Solid Earth, 13, 1127–1159. doi:10.5194/se-13-1127-2022 .

  • Müller, R. D., Zahirovic, S., Williams, S. E., Cannon, J., Seton, M., Bower, D. J., Tetley, M. G., Heine, C., Le Breton, E., Liu, S., Russell, S. H. J., Yang, T., Leonard, J., and Gurnis, M. (2019). A global plate model including lithospheric deformation along major rifts and orogens since the Triassic. Tectonics, 38(6) 1884-1907. doi:10.1029/2018TC005462 .

  • Müller R.D., Seton, M., Zahirovic, S., Williams, S.E., Matthews, K.J., Wright, N.M., Shephard, G.E., Maloney, K.T., Barnett-Moore, N., Hosseinpour, M., Bower, D.J., Cannon, J. (2016). Ocean basin evolution and global-scale plate reorganization events since Pangea breakup. Annual Review of Earth and Planetary Sciences 44(1), 107-138. doi:10.1146/annurev-earth-060115-012211 .

  • Scotese, C., & Wright, N. M. (2018). PALEOMAP Paleodigital Elevation Models (PaleoDEMs) for the Phanerozoic. PALEOMAP Project.

  • Seton, M., Müller, R.D., Zahirovic, S., Gaina, C., Torsvik, T.H., Shephard, G., Talsma, A., Gurnis, M., Turner, M., Maus, S., Chandler, M. (2012). Global continental and ocean basin reconstructions since 200 Ma. Earth-Science Reviews, 113(3-4), 212-270. doi:10.1016/j.earscirev.2012.03.002 .

  • Wright, N., Zahirovic, S., Müller, R. D., & Seton, M. (2013). Towards community-driven paleogeographic reconstructions: integrating open-access paleogeographic and paleobiology data with plate tectonics. Biogeosciences, 10(3), 1529-1541. doi:10.5194/bg-10-1529-2013 .

See GPlates documentation for additional information and details.


Lewis A. Jones


Kilian Eichenseer, Lucas Buffan & Will Gearty


if (FALSE) {
#Generic example with a few occurrences
occdf <- data.frame(lng = c(2, -103, -66),
                lat = c(46, 35, -7),
                age = c(88, 125, 200))

#Calculate palaeocoordinates using reconstruction files
ex1 <- palaeorotate(occdf = occdf, method = "grid")

#Calculate palaeocoordinates using the GPlates API
ex2 <- palaeorotate(occdf = occdf, method = "point")

#Calculate uncertainity in palaeocoordinates from models
ex3 <- palaeorotate(occdf = occdf,
                    method = "grid",
                    model = c("MERDITH2021",
                    uncertainty = TRUE)

#Now with some real fossil occurrence data!

#Grab some data from the Paleobiology Database

#Assign midpoint age of fossil occurrence data for reconstruction
tetrapods$age <- (tetrapods$max_ma + tetrapods$min_ma)/2

#Rotate the data
ex3 <- palaeorotate(occdf = tetrapods)

#Calculate uncertainity in palaeocoordinates from models
ex4 <- palaeorotate(occdf = tetrapods,
                    model = c("MERDITH2021",
                    uncertainty = TRUE)