{
  "brand": "Tectonic Plate Maps",
  "retrieved": "2026-10-11",
  "plate_and_hazard_layers": {
    "retrieved": "2026-10-11",
    "coordinateSystem": "GeoJSON longitude, latitude in WGS84 degrees (EPSG:4326)",
    "generator": "research-data/fetch-sources.py",
    "datasets": {
      "boundaries": {
        "file": "dist/data/sourced-boundaries.json",
        "title": "PB2002 classified plate-boundary steps",
        "modelYear": 2002,
        "publicationYear": 2003,
        "source": "https://raw.githubusercontent.com/fraxen/tectonicplates/master/original/PB2002_steps.csv",
        "documentation": "https://github.com/fraxen/tectonicplates/blob/master/original/PB2002_steps_desc.txt",
        "citation": "Bird, P. (2003), An updated digital model of plate boundaries, Geochemistry, Geophysics, Geosystems, 4(3), 1027, doi:10.1029/2001GC000252. Conversion by Hugo Ahlenius, Nordpil.",
        "license": "Open Data Commons Attribution License 1.0 (ODC-By), commercial use permitted with attribution",
        "licenseUrl": "https://github.com/fraxen/tectonicplates/blob/master/LICENSE.md",
        "licenseTextUrl": "https://opendatacommons.org/licenses/by/1-0/",
        "attribution": "Plate boundaries: Peter Bird, PB2002 (2003); Hugo Ahlenius, Nordpil. ODC-By 1.0. Converted and grouped for this map.",
        "geometry": "MultiLineString",
        "processing": "All source step rows retained. Consecutive connected steps sharing the exact original boundary identifier and class are grouped. Antimeridian crossings are split at +/-180 using interpolated boundary crossing latitude. Original coordinate precision retained. No class inferred from the blank Type field in the older boundary GeoJSON.",
        "properties": {
          "kind": "Display family: divergent, convergent or transform",
          "subtype": "Original seven-class code, identical to class",
          "class": "Original PB2002 step class",
          "type": "Alias of kind",
          "label": "Readable original class description",
          "name": "Original plate-pair boundary identifier, including its directional separator",
          "plateA": "First two-letter PB2002 plate code",
          "plateB": "Second two-letter PB2002 plate code",
          "subduction": "True only for original SUB class",
          "subductingPlate": "PB2002 two-letter code of the subducting plate, present only on SUB features with a documented directional title symbol",
          "overridingPlate": "PB2002 two-letter code of the overriding plate, present only on SUB features with a documented directional title symbol"
        },
        "classification": {
          "CCB": {
            "kind": "convergent",
            "meaning": "Continental convergent boundary"
          },
          "CTF": {
            "kind": "transform",
            "meaning": "Continental transform fault"
          },
          "CRB": {
            "kind": "divergent",
            "meaning": "Continental rift boundary"
          },
          "OSR": {
            "kind": "divergent",
            "meaning": "Oceanic spreading ridge"
          },
          "OTF": {
            "kind": "transform",
            "meaning": "Oceanic transform fault"
          },
          "OCB": {
            "kind": "convergent",
            "meaning": "Oceanic convergent boundary, excluding subduction"
          },
          "SUB": {
            "kind": "convergent",
            "meaning": "Subduction zone"
          }
        },
        "limitations": "Global generalized scientific model, not detailed local fault mapping. Distinct from a modern real-time plate-motion product. Show subduction as a subset of convergence. Plate codes follow PB2002, including Africa/Somalia and India/Australia distinctions.",
        "featureCount": 1688,
        "fileBytes": 554150,
        "sha256": "5917dec940642b89d448fd46315326cd56f0d490e3178de3dd8d29a586293db1",
        "originalStepCount": 5819,
        "subductionPolarity": {
          "citation": "Bird, P. (2003), An updated digital model of plate boundaries, paragraph 122, doi:10.1029/2001GC000252.",
          "publicationUrl": "https://agupubs.onlinelibrary.wiley.com/doi/10.1029/2001GC000252",
          "supportingDataConventionUrl": "https://github.com/fraxen/tectonicplates/blob/master/original/README.md",
          "supportingDataSection": "Data files, item 1: PB2002_boundaries.dig.txt",
          "shortExactQuote": "the symbol \"/\" indicates that the right-hand plate subducts under the left-hand plate",
          "rule": "First two characters identify the left plate, final two characters the right plate. A/B: B subducts beneath A. A\\B: A subducts beneath B. Left/right refer to travel along the source segment viewed from outside Earth.",
          "application": "Applied only to the original SUB step class. No direction inferred from line coordinates or geometry. Direction fields omitted for other step classes, including non-SUB steps on slash-named boundaries.",
          "featureCount": 66
        }
      },
      "volcanoes": {
        "file": "dist/data/sourced-volcanoes.json",
        "title": "NOAA NCEI Global Volcano Locations Database",
        "source": "https://www.ngdc.noaa.gov/hazel/hazard-service/api/v1/volcanolocs",
        "documentation": "https://data.noaa.gov/metaview/page?header=none&view=getDataView&xml=NOAA%2FNESDIS%2FNGDC%2FMGG%2FHazards%2F%2Fiso%2Fxml%2FG02135.xml",
        "license": "NOAA metadata: Produced by the NOAA National Centers for Environmental Information. Not subject to copyright protection within the United States. No use constraints listed.",
        "licenseUrl": "https://data.noaa.gov/metaview/page?view=ISO19115Components-HTMLTable&xml=NOAA%2FNESDIS%2FNGDC%2FMGG%2FHazards%2Fiso%2Fxml%2FG02135.xml",
        "attribution": "Volcano locations: NOAA National Centers for Environmental Information, Global Volcano Locations Database, from Smithsonian Global Volcanism Program. Accessed 11 October 2026.",
        "geometry": "Point",
        "processing": "Retrieve every API page, 200 items per page. Retain all 1,609 source point locations with coordinates and descriptive fields. No current eruption status inferred.",
        "properties": {
          "id": "NOAA volcano-location identifier",
          "name": "NOAA published volcano name",
          "country": "NOAA country field, not an assertion about territorial status",
          "elevation": "Elevation in metres relative to global mean sea level; negative values are submarine",
          "morphology": "Published volcano form, such as stratovolcano or caldera",
          "status": "Historical database evidence/category, such as Historical or Radiocarbon. Not a live activity alert."
        },
        "limitations": "A locations catalogue, not a list of currently erupting volcanoes. NOAA lineage describes acquisition from GVP around 2006 and as-needed maintenance; no current 2026 observation date is implied. Direct Smithsonian web data were not used because their website has separate non-commercial terms. This copy follows the explicit NOAA dataset metadata.",
        "featureCount": 1609,
        "fileBytes": 342554,
        "sha256": "b54043c98f2a1057bb3c33c808d0d1289c3a81aff44e91b85a575df710273457"
      },
      "californiaFaults": {
        "file": "dist/data/sourced-california-faults.json",
        "title": "USGS Quaternary Fault and Fold Database, California layer",
        "modelRelease": "2020 Release",
        "source": "https://earthquake.usgs.gov/arcgis/rest/services/haz/Qfaults/MapServer/4",
        "documentation": "https://www.usgs.gov/programs/earthquake-hazards/faults",
        "license": "USGS public-domain scientific data; attribution requested",
        "licenseUrl": "https://www.usgs.gov/information-policies-and-instructions/copyrights-and-credits",
        "attribution": "California faults: USGS Quaternary Fault and Fold Database, 2020 release, with California Geological Survey. Generalized for web display.",
        "geometry": "MultiLineString",
        "processing": "Every feature from California layer 4 is retrieved in OBJECTID order, with pagination verified. Server simplifies at 0.001 degree tolerance, coordinates rounded to 4 decimals. Features sharing all retained attributes are grouped; zero-length paths produced by simplification are omitted.",
        "properties": {
          "name": "Published fault name",
          "section": "Published section name, sometimes empty",
          "source": "Source attribution label",
          "faultId": "USGS fault identifier",
          "age": "Published period of most recent surface deformation",
          "certainty": "Mapped location certainty, including Well Constrained, Moderately Constrained or Inferred",
          "class": "USGS fault class, not plate-boundary movement type",
          "slipRate": "Published slip-rate category in mm/year, often unspecified",
          "slipSense": "Published movement description, often empty",
          "url": "USGS archived scientific report URL where provided"
        },
        "limitations": "California only; separate California Offshore layer is not included. Includes multiple Quaternary age classes, so label as Quaternary faults rather than all currently active. Generalized map is not for parcel-scale hazard assessment or prediction. Latest Quaternary means less than 15,000 years in this source; historic means less than 150 years as defined by the source, not recalculated annually.",
        "featureCount": 2392,
        "fileBytes": 3644167,
        "sha256": "15653abcb01126ff597ef288b0d9020595be4ae22cd7ed1b04f86dcf25223666"
      },
      "hotspots": {
        "file": "dist/data/sourced-hotspots.json",
        "title": "EarthByte present-day hotspot/plume compilation",
        "publicationYear": 2015,
        "source": "https://www.earthbyte.org/webdav/ftp/earthbyte/GPlates/GPlates2.3_GeoData/Individual/Hotspots.zip",
        "documentation": "https://www.earthbyte.org/gplates-2-3-software-and-data-sets/",
        "license": "Creative Commons Attribution 3.0 Unported, commercial use permitted with attribution",
        "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
        "licenseEvidence": "https://www.earthbyte.org/gplates-2-3-software-and-data-sets/",
        "citation": "Whittaker, J., Afonso, J., Masterton, S., Muller, R., Wessel, P., Williams, S., and Seton, M. (2015), Long-term interaction between mid-ocean ridges and mantle plumes, Nature Geoscience 8, 479-483, doi:10.1038/ngeo2437.",
        "attribution": "Hotspots: Whittaker et al. (2015), EarthByte, CC BY 3.0. Converted from GPlates data.",
        "geometry": "Point",
        "processing": "All HotSpot features in supplied GPMLZ converted using their published Long and Lat attributes. No points invented or manually positioned.",
        "properties": {
          "name": "Published hotspot name",
          "source": "Per-feature scientific reference from the compilation",
          "domain": "Pacific or Indo/Atlantic reference domain"
        },
        "limitations": "Generalized present-day surface hotspot/plume locations, not volcano summits or an eruption forecast. Source combined plumes closer than 500 km into averaged locations. Proposed plume interpretations carry scientific uncertainty.",
        "featureCount": 68,
        "fileBytes": 11017,
        "sha256": "93480b4d86fd58ac710d9674c91657ec704a6b6be68b0d06e9e59d3b4567c629"
      }
    }
  },
  "history_and_motion": {
    "retrieved": "2026-10-11",
    "license": "CC BY 4.0",
    "license_url": "https://creativecommons.org/licenses/by/4.0/",
    "reconstruction": {
      "model": "MULLER2019",
      "reference": "Muller et al. (2019), A global plate model including lithospheric deformation along major rifts and orogens since the Triassic",
      "doi": "https://doi.org/10.1029/2018TC005462",
      "dataset": "https://zenodo.org/records/11601026",
      "model_docs": "https://gwsdoc.gplates.org/models/",
      "reference_frame": "Mantle reference frame; anchor_plate_id=0",
      "times_ma": [
        0,
        50,
        100,
        150,
        200,
        250
      ],
      "source_url_template": "https://gws.gplates.org/reconstruct/coastlines/?time={time}&model=MULLER2019&anchor_plate_id=0&wrap=true",
      "files": "history-coastlines-{time}.json",
      "method": "GPlates Web Service rotated present-day coastline polygons. Simplified with Shapely preserve_topology at 0.12 degrees; coordinates rounded to four decimal places. No interpolation between snapshots.",
      "limitations": "These are rotated modern coastline outlines, not reconstructions of ancient shorelines. Geological reconstructions are model interpretations. The endpoint does not expose a model package checksum, so the service output snapshot is archived with hashes.",
      "additional_plate_files": [
        "history-plates-0.json",
        "history-plates-200.json",
        "history-plates-250.json"
      ],
      "additional_plates_method": "TopologicalClosedPlateBoundary features only, from /topology/plate_polygons?time={time}&model=MULLER2019&wrap=true. Deforming networks and slab boundaries omitted."
    },
    "seafloor_age": {
      "reference": "Seton et al. (2020), A global data set of present-day oceanic crustal age and seafloor spreading parameters",
      "doi": "https://doi.org/10.1029/2020GC009214",
      "dataset": "https://zenodo.org/records/6782543",
      "source_url": "https://earthbyte.org/webdav/ftp/earthbyte/agegrid/2020/Grids/age.2020.1.GeeK2007.6m.grd",
      "source_resolution": "6 arc minutes, gridline registered",
      "version": "2020.1, included in dataset v1.1",
      "time_scale": "Gee and Kent (2007)",
      "bounds": [
        [
          -90,
          -180
        ],
        [
          90,
          180
        ]
      ],
      "display_resolution_degrees": 0.25,
      "width": 1440,
      "height": 720,
      "image": "history-seafloor-age.png",
      "values": "history-seafloor-age.json",
      "method": "Nearest source grid value at each 0.25-degree display pixel center. Transparent no-data mask; values in millions of years. Rows north to south, columns west to east.",
      "limitations": "The display is sampled from a scientific model and is not a field measurement at every point. Blank cells have no oceanic age value."
    },
    "motion": {
      "file": "history-motion.json",
      "model": "MULLER2019",
      "reference_frame": "Mantle reference frame; anchor plate 0",
      "interval_ma": [
        1,
        0
      ],
      "source_euler_urls": [
        "https://gws.gplates.org/rotation/get_euler_pole_and_angle?times=0&model=MULLER2019",
        "https://gws.gplates.org/rotation/get_euler_pole_and_angle?times=1&model=MULLER2019"
      ],
      "source_polygons_url": "https://gws.gplates.org/topology/plate_polygons?time=0&model=MULLER2019&wrap=true",
      "method": "12-degree grid. Points included only when exactly one rigid topological plate polygon covers them. Euler finite rotations at 0 and 1 Ma composed as R(0)*inverse(R(1)), converted to angular velocity. Tangential surface velocity is omega cross unit position times Earth mean radius 6371.009 km. km/Myr equals mm/yr numerically. Bearings clockwise from north.",
      "vector_count": 367,
      "limitations": "Rigid plate model velocities averaged over 1 million years, not GPS observations or local deformation predictions. Deforming networks and overlapping regions excluded. Arrows must be labeled as a visual scale, not annual travel distance.",
      "api_note": "Direct /velocity/plate_polygons returned HTTP 500 on both gws and gws1 on 2026-10-11. Euler and topology APIs succeeded."
    },
    "assets": [
      {
        "file": "history-coastlines-0.json",
        "bytes": 665677,
        "sha256": "0e2ba99c75cb8136e78c53e5fb3cd25765050a9e1a99ad20995dc733e578d453"
      },
      {
        "file": "history-coastlines-100.json",
        "bytes": 548909,
        "sha256": "ed46d201af680bb83cbe3c6b645a9f8ba131e1884ab461e6d9aba4a29085d702"
      },
      {
        "file": "history-coastlines-150.json",
        "bytes": 503514,
        "sha256": "d39ebcc90d5a514e367676d64699f99af44bcea74d9a89108e3209a128d57fb2"
      },
      {
        "file": "history-coastlines-200.json",
        "bytes": 484386,
        "sha256": "77ca07cbc29d89905c6e103167a775aa13ebda44ebc9a17a01346d1c7f25ec86"
      },
      {
        "file": "history-coastlines-250.json",
        "bytes": 473846,
        "sha256": "63e76f7f65078786ebbe103b91c892bbb787c96f47df7eb3deb51f4d31c70811"
      },
      {
        "file": "history-coastlines-50.json",
        "bytes": 609222,
        "sha256": "e1ce7912f182fc14c4e146b425f21430fe285784cdbad15ec0abe152feaf2613"
      },
      {
        "file": "history-motion.json",
        "bytes": 114232,
        "sha256": "61a95f4f6a980a4281eb59064501c41637dd0f7460e2b659d0d730e9b4213f53"
      },
      {
        "file": "history-plates-0.json",
        "bytes": 65207,
        "sha256": "d4f72efd2cffacb8d945d8c51e64ad441eb1ba77151881fbed54b105ad781b0f"
      },
      {
        "file": "history-plates-200.json",
        "bytes": 19466,
        "sha256": "697281d0bdd94010366f1fe6aa1dd583d40a25a9d296f29f82f2a8781872e0c4"
      },
      {
        "file": "history-plates-250.json",
        "bytes": 14441,
        "sha256": "33023c97f78746f888b2aed8394130f1edd34f1d66a2293bbd5f4cd0bd2efb24"
      },
      {
        "file": "history-seafloor-age.json",
        "bytes": 5240965,
        "sha256": "872ba9d5828a001991a13d6a193d784571f82578e78edaa45fb151d3d4cb3df3"
      },
      {
        "file": "history-seafloor-age.png",
        "bytes": 447509,
        "sha256": "c2edce8b3ef10e2c3ffc629a3def62ee77b165f6673c47a85b5ec53adf191a2c"
      }
    ]
  },
  "countries": {
    "source": "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_110m_admin_0_countries.geojson",
    "licence": "Natural Earth, public domain",
    "method": "Planar polygon intersection with PB2002. Tiny overlaps below max(0.015 square degrees, 0.2% country polygon area) excluded. Approximate educational lookup, not a complete territorial inventory or hazard assessment.",
    "countries": 177
  },
  "earthquakes": {
    "source": "https://earthquake.usgs.gov/fdsnws/event/1/",
    "snapshot": "Calendar 2025, magnitude >= 6",
    "optional_recent_feed": "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson",
    "licence": "USGS public-domain data"
  },
  "terrain_and_lakes": {
    "retrieved": "2026-10-11",
    "generator": "research-data/build-supplements.py",
    "terrain": {
      "file": "dist/data/terrain.webp",
      "fileBytes": 939984,
      "sha256": "74c05fe1255b190467ac9a136f4b50b05b99242e16214ce99be46115902cb99a",
      "title": "Natural Earth I with Shaded Relief, 1:50 million, small size, version 3.2.0",
      "source": "https://naturalearth.s3.amazonaws.com/50m_raster/NE1_50M_SR.zip",
      "sourcePage": "https://www.naturalearthdata.com/downloads/50m-raster-data/50m-natural-earth-1/",
      "license": "Public domain, commercial use and modifications permitted",
      "licenseUrl": "https://www.naturalearthdata.com/about/terms-of-use/",
      "attribution": "Made with Natural Earth.",
      "coordinateSystem": "Geographic WGS84 equirectangular world raster",
      "boundsWestSouthEastNorth": [
        -180,
        -90,
        180,
        90
      ],
      "pixelDimensions": [
        5400,
        2700
      ],
      "sourcePixelDimensions": [
        10800,
        5400
      ],
      "sourceModelPixelScale": [
        0.03333333333333,
        0.03333333333333,
        0.0
      ],
      "sourceModelTiepoint": [
        0.0,
        0.0,
        0.0,
        -179.99999999999997,
        90.0,
        0.0
      ],
      "processing": "Official source GeoTIFF resized with Lanczos to 5400 by 2700, RGB WebP quality 85. No geographic warping or invented terrain.",
      "limitations": "Generalized land-cover coloring and shaded relief for thematic mapping. Not an elevation grid, modern satellite observation, or precise topographic survey. Raster is geographic, not Web Mercator; an overlay renderer must project it accordingly."
    },
    "lakes": {
      "file": "dist/data/regional-lakes.json",
      "fileBytes": 15096,
      "sha256": "c7f00a0cc99745219f55a241119d2340ff5f1767911092328157eb311f53e83e",
      "title": "Natural Earth 1:50 million lakes, East Africa subset",
      "source": "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_50m_lakes.geojson",
      "repository": "https://github.com/nvkelso/natural-earth-vector",
      "license": "Public domain, commercial use and modifications permitted",
      "licenseUrl": "https://www.naturalearthdata.com/about/terms-of-use/",
      "attribution": "Made with Natural Earth.",
      "coordinateSystem": "GeoJSON longitude, latitude in WGS84 degrees",
      "subsetBoundsWestSouthEastNorth": [
        25,
        -20,
        49,
        18
      ],
      "featureCount": 17,
      "processing": "Select geometries intersecting the requested region, clip to region, simplify with 0.015 degree tolerance and preserve topology. Retain the published lake name.",
      "properties": {
        "name": "Natural Earth published lake name, or Unnamed lake where the source name is absent"
      },
      "limitations": "Generalized 1:50 million lake outlines, not current shorelines or water-level observations."
    }
  },
  "display_processing": {
    "date": "2026-10-11",
    "purpose": "Display-only dissolved land outlines from archived scientific reconstruction snapshots.",
    "source_model": "MULLER2019, mantle reference frame, anchor plate 0",
    "source_license": "CC BY 4.0",
    "reference": "https://doi.org/10.1029/2018TC005462",
    "method": "Shapely union_all of all polygon areas in each existing simplified GeoJSON frame. No buffering, smoothing, interpolation or geographic shifts. Invalid geometries repaired using make_valid if needed, retaining only polygon components. Adjacent and overlapping reconstruction blocks are dissolved; original source snapshots remain unchanged.",
    "coordinate_system": "EPSG:4326. Planar polygon union in longitude/latitude coordinates after source antimeridian wrapping. Areas reported in square degrees are geometry QA quantities, not physical land areas.",
    "frames": [
      {
        "age_ma": 0,
        "source": "history-coastlines-0.json",
        "source_sha256": "0e2ba99c75cb8136e78c53e5fb3cd25765050a9e1a99ad20995dc733e578d453",
        "output": "history-land-0.json",
        "output_sha256": "b8db9a9fbdbac99b8c0ea91b3988f647f67ffe2281f51ccb7e4fb5e7c01d3b45",
        "source_feature_count": 2460,
        "invalid_features_repaired": 1,
        "output_polygon_count": 1793,
        "input_polygon_area_sum_sq_degrees": 21329.542121825,
        "union_area_sq_degrees": 21304.8496895126,
        "serialized_symmetric_difference_sq_degrees": 0.0,
        "input_land_missing_from_union_sq_degrees": 4.5338003054678884e-13,
        "output_bytes": 482977,
        "repair_absolute_area_delta_sq_degrees": 0.0
      },
      {
        "age_ma": 50,
        "source": "history-coastlines-50.json",
        "source_sha256": "e1ce7912f182fc14c4e146b425f21430fe285784cdbad15ec0abe152feaf2613",
        "output": "history-land-50.json",
        "output_sha256": "2cc0fe8b7a63c82e82759520eb61c9ac8b3d21c5efedb8b065a742ff8c7b560d",
        "source_feature_count": 2108,
        "invalid_features_repaired": 1,
        "output_polygon_count": 1523,
        "input_polygon_area_sum_sq_degrees": 21660.206082965,
        "union_area_sq_degrees": 21525.10871963128,
        "serialized_symmetric_difference_sq_degrees": 0.0,
        "input_land_missing_from_union_sq_degrees": 3.9057563684909685e-13,
        "output_bytes": 454905,
        "repair_absolute_area_delta_sq_degrees": 0.0
      },
      {
        "age_ma": 100,
        "source": "history-coastlines-100.json",
        "source_sha256": "ed46d201af680bb83cbe3c6b645a9f8ba131e1884ab461e6d9aba4a29085d702",
        "output": "history-land-100.json",
        "output_sha256": "475f79d4fd1fc50e0d5d75853ade4b1cfaaf271b3e10c94495c157f4ff7c42d7",
        "source_feature_count": 1884,
        "invalid_features_repaired": 0,
        "output_polygon_count": 1336,
        "input_polygon_area_sum_sq_degrees": 22528.004996999993,
        "union_area_sq_degrees": 22157.28119230844,
        "serialized_symmetric_difference_sq_degrees": 0.0,
        "input_land_missing_from_union_sq_degrees": 4.2519492686588393e-13,
        "output_bytes": 407951,
        "repair_absolute_area_delta_sq_degrees": 0.0
      },
      {
        "age_ma": 150,
        "source": "history-coastlines-150.json",
        "source_sha256": "d39ebcc90d5a514e367676d64699f99af44bcea74d9a89108e3209a128d57fb2",
        "output": "history-land-150.json",
        "output_sha256": "4923384333fbbc772c538d6ec314203ed661bcd60f6c36c7a8dff23e0288cf3e",
        "source_feature_count": 1730,
        "invalid_features_repaired": 0,
        "output_polygon_count": 1241,
        "input_polygon_area_sum_sq_degrees": 21551.446997679996,
        "union_area_sq_degrees": 21198.007590938534,
        "serialized_symmetric_difference_sq_degrees": 0.0,
        "input_land_missing_from_union_sq_degrees": 2.259500646303282e-13,
        "output_bytes": 375512,
        "repair_absolute_area_delta_sq_degrees": 0.0
      },
      {
        "age_ma": 200,
        "source": "history-coastlines-200.json",
        "source_sha256": "77ca07cbc29d89905c6e103167a775aa13ebda44ebc9a17a01346d1c7f25ec86",
        "output": "history-land-200.json",
        "output_sha256": "0918a462cd63a3424135badda3fe71fea7d9ee5ecbb8efa16817b68f6a09260c",
        "source_feature_count": 1682,
        "invalid_features_repaired": 1,
        "output_polygon_count": 1162,
        "input_polygon_area_sum_sq_degrees": 19674.648522224998,
        "union_area_sq_degrees": 19334.514176623,
        "serialized_symmetric_difference_sq_degrees": 0.0,
        "input_land_missing_from_union_sq_degrees": 2.60431869328663e-13,
        "output_bytes": 354209,
        "repair_absolute_area_delta_sq_degrees": 0.0
      },
      {
        "age_ma": 250,
        "source": "history-coastlines-250.json",
        "source_sha256": "63e76f7f65078786ebbe103b91c892bbb787c96f47df7eb3deb51f4d31c70811",
        "output": "history-land-250.json",
        "output_sha256": "0d75506516a9321335d67bbec0bea40b6de80aef4aee42e73fa3898cd48ae7fc",
        "source_feature_count": 1638,
        "invalid_features_repaired": 1,
        "output_polygon_count": 1131,
        "input_polygon_area_sum_sq_degrees": 19698.779048849992,
        "union_area_sq_degrees": 19299.745562422613,
        "serialized_symmetric_difference_sq_degrees": 0.0,
        "input_land_missing_from_union_sq_degrees": 2.3265854115489704e-13,
        "output_bytes": 350201,
        "repair_absolute_area_delta_sq_degrees": 0.0
      }
    ]
  },
  "pacific_projection": {
    "created": "2026-10-11",
    "generator": "research-data/build-pacific.py",
    "purpose": "Pre-cut polygons for a Pacific-centered map using the 0..360 longitude display domain.",
    "coordinateSystem": "Geographic latitude and longitude degrees, with western longitudes represented as longitude + 360. Custom display-domain GeoJSON; coordinates greater than 180 require a compatible renderer.",
    "method": "Preserve original properties and feature order. Repair invalid input rings with GEOS make_valid where required, retaining polygonal parts. Intersect each source feature with closed longitude halves [-180,0] and [0,180], translate only western half by +360, then union the resulting polygonal pieces within that feature. Preserve holes. No resampling, simplification, guessed outlines, or invented fill.",
    "validation": "All output geometries valid; all bounds in [0,360] x [-90,90]; every ring edge longitude change <=180 degrees. Per-feature planar area preserved within floating-point tolerance. Reverse cut/translation reproduces the valid source polygon footprint with negligible symmetric-difference area.",
    "areaUnits": "Square degrees in the geographic coordinate plane. Area checks test preservation of geometry, not physical surface area.",
    "sources": {
      "plates": {
        "input": "dist/data/plates.json",
        "inputSha256": "922918f970baf7e645821a4a728b945dbb5eeac1337d71d087fba021bcc79e21",
        "output": "dist/data/pacific-plates.json",
        "outputSha256": "925417ce6b93803e8ff5dccd5eeb3e3073b3217458aad20bb4a72591ed73d215",
        "featureCount": 54,
        "fileBytes": 229640,
        "sourcePlanarArea": 64800.0001381482,
        "outputPlanarArea": 64800.00013814818,
        "maximumFeatureAreaError": 1.6370904631912708e-11,
        "maximumFeatureRoundtripDifferenceArea": 2.023283875693907e-12,
        "inputValidityRepairs": [
          {
            "featureIndex": 43,
            "properties": {
              "LAYER": "plate",
              "Code": "MS",
              "PlateName": "Molucca Sea"
            },
            "reason": "Ring Self-intersection[126.144 1.00135]",
            "originalPlanarArea": 33.8384501605,
            "validPlanarArea": 33.83845016050002,
            "areaChange": 1.4210854715202004e-14
          }
        ],
        "attribution": "Original source attribution and licence unchanged; see existing dataset source ledger and research-data/data-manifest.json."
      },
      "land": {
        "input": "dist/data/land.json",
        "inputSha256": "9e0729ee253ca7d7a5c4ae9395fb1902264c5377c52e224d13dd85010e2835d9",
        "output": "dist/data/pacific-land.json",
        "outputSha256": "079e86298737627143d13e36a4bd2ef284658d4c056e1d7f5642f31e109c00f6",
        "featureCount": 127,
        "fileBytes": 133868,
        "sourcePlanarArea": 21496.95130156355,
        "outputPlanarArea": 21496.951301563546,
        "maximumFeatureAreaError": 4.547473508864641e-12,
        "maximumFeatureRoundtripDifferenceArea": 6.332041863725558e-13,
        "inputValidityRepairs": [
          {
            "featureIndex": 78,
            "properties": {
              "featurecla": "Land",
              "scalerank": 1,
              "min_zoom": 1
            },
            "reason": "Ring Self-intersection[-132.710008 54.040009]",
            "originalPlanarArea": 1.5712356928265123,
            "validPlanarArea": 1.5712356928265125,
            "areaChange": 2.220446049250313e-16
          }
        ],
        "attribution": "Original source attribution and licence unchanged; see existing dataset source ledger and research-data/data-manifest.json."
      },
      "countries": {
        "input": "dist/data/countries.json",
        "inputSha256": "e32596c4eb8a7fc8f84f4c786406616e84d127b1ccf5f3104ddd3e3494511315",
        "output": "dist/data/pacific-countries.json",
        "outputSha256": "ddac6bdd5bda2328497c8f362d0494426b537d8f976aa46207d18583505c562e",
        "featureCount": 177,
        "fileBytes": 250101,
        "sourcePlanarArea": 21497.003719686898,
        "outputPlanarArea": 21497.003719686894,
        "maximumFeatureAreaError": 3.637978807091713e-12,
        "maximumFeatureRoundtripDifferenceArea": 2.70323415375531e-12,
        "inputValidityRepairs": [],
        "attribution": "Original source attribution and licence unchanged; see existing dataset source ledger and research-data/data-manifest.json."
      }
    }
  }
}
