GTAmap v1.1 · released 2026-09-29

Global administrative divisions with a time dimension

What this is

GTAmap provides annual series of global administrative boundaries for 2000–2026, with change events and per-feature provenance, for research, statistical alignment and mapping.

It answers one concrete question: what did the boundary of a given place look like in a given year, and on what evidence? Common global boundary datasets (such as GADM) give one “current” boundary; GTAmap gives a boundary sequence that changes over time, where every boundary carries a year, a source download URL and a confidence grade.

Year coverage, stated plainly: 2000–2026 is the dataset’s overall span, not an annual series for every country. 175 of the 244 packages contain only 1–2 vintages; only five exceed 26 years (Norway 34, Estonia 30, China/Italy/Iceland 27 each). Check the target country’s actual year range before planning a cross-country annual analysis.

GTAmap provides annual series of global administrative boundaries (2000–2026) with change events and per-feature provenance, for research, statistical alignment and mapping.

Track how administrative units changed over 20 years using the same unit_id, or count how many boundary changes happened in a given year.
Align year-2000 statistical yearbook data to the year-2000 boundaries, instead of fitting today’s boundaries onto data from a decade ago.
Download GeoJSON / GeoParquet directly and drop it into QGIS, ArcGIS or Python to build time-series maps and animations.

Three levels: ADM0 / ADM1 / ADM2 (China also has ADM3, county level) 4 global anchor years: 2000 / 2010 / 2020 / 2025 GeoParquet + GPKG Need a quick definition? 90-second glossary →

Key figures

244
Country / territory time-series packages
244 country/region packages: 243 country entities and one regional package.
511,244
Total time-series rows
Total unit-by-year records across 244 packages; one row represents one unit in one snapshot year.
20,006
Change events
With change type / effective date / evidence / confidence

Scale: 297 data files and about 43.0 GB (244 country/region packages, 12 global GeoParquet files, 15 GeoJSON previews and 17 PMTiles). Country packages range from 12.9 KB to 7.35 GB; each item shows its actual size and estimated download time.

Coverage is uneven: 175 of 244 packages have only 1–2 vintages, and only five exceed 26 years. Check the download guide before cross-country annual analysis.

Typical scenarios / What people actually do

The three most common use cases, ready to follow

Each scenario spells out three things: which file to download, which few lines of code to run, and what the pitfalls are. The code assumes you have run pip install geopandas pandas pyarrow and unzipped the download into the current directory.

Align statistics from different years to a single year’s boundaries

“I want to compare Chinese county-level population from 2000 to 2020, but the number of county units differs between years — counting by today’s county boundaries would be misaligned.”

  1. Download the China package (data/countries/CHN.zip, about 1.9 GB); unzipping gives CHN_adm3_timeseries.parquet and friends — the bundled README.txt lists row counts and fields.
  2. Select the year you need via snapshot_year, then join your statistical table by unit_id.
  3. Export a GPKG (opens directly in QGIS/ArcGIS) or keep working in Python.
Python · Example 1
import geopandas as gpd, pandas as pd

chn = gpd.read_parquet("CHN_adm3_timeseries.parquet")
b_2020 = chn[chn.snapshot_year == 2020][["unit_id", "name", "geometry"]]

pop = pd.read_csv("my_pop_2020.csv")
gdf = b_2020.merge(pop, on="unit_id", how="left")
gdf.to_file("chn_2020_with_pop.gpkg", driver="GPKG")
Find a region’s boundary changes since 2000

“I want to know whether a province or city was merged or renamed over the years, and which document supports it.”

  1. Download the full event library (data/all_events.csv, about 5.7 MB — one file holds all events).
  2. Filter the dataset column to a country (e.g. CHN_timeline) and sort by effective date.
  3. Read detail for what changed and legal_reference for the supporting document number.
Python · Example 2
import pandas as pd

ev = pd.read_csv("data/all_events.csv", encoding="utf-8-sig")
chn = ev[ev["dataset"].str.startswith("CHN")]
recent = chn.sort_values("effective_date", ascending=False).head(10)
print(recent[["effective_date", "event_type", "detail", "legal_reference"]])
Build a time-series map of one country

“I want a four-panel map of China’s prefecture-level boundary changes from 2000 to 2026, to see where things changed.”

  1. Download the China package again, this time using CHN_adm2_timeseries.parquet (prefecture level).
  2. Loop over years to produce each map; put that year’s unit count in the title and you can see at a glance which year saw an adjustment.
  3. Want a preview without downloading? Switch years on the map explorer page instead.
Python · Example 3
import geopandas as gpd, matplotlib.pyplot as plt

chn = gpd.read_parquet("CHN_adm2_timeseries.parquet")
years = [2000, 2010, 2020, 2026]
fig, axes = plt.subplots(1, len(years), figsize=(20, 5))
for ax, y in zip(axes, years):
    g = chn[chn.snapshot_year == y]
    if len(g): g.plot(ax=ax, edgecolor="white", linewidth=0.3)
    ax.set_title(f"{y} (n={len(g)})"); ax.set_axis_off()
plt.tight_layout(); plt.savefig("chn_adm2_4panel.png", dpi=150)

More examples (QGIS steps, filtering out back-filled geometry by geom_origin, batch-verifying SHA-256) are in the 5-minute quick start and the field dictionary.

Why GTAmap

Four key differences

The biggest problem with boundary data is not whether it exists, but which year it represents, who says so, and whether it can be verified. GTAmap writes all three answers into the data itself.

Time dimension

Every unit carries a snapshot_year, and the same ID can be compared across years. Brazil spans 18 years, China 27 years (2000–2026), Norway 34 and Estonia 30. This is not “one current boundary” but a sequence of boundary evolution.

Traceable sources

Per-feature fields src_id / src_name / src_url / src_license / src_vintage / src_type point straight at official download locations such as IBGE, TIGER, MLIT and CTAmap — no more guessing where a file came from.

Event-driven

20,006 change events record splits and mergers: 3,782 French commune mergers, 1,819 in Japan’s Heisei consolidation, Mali’s ADM2 growing from 53 to 160 in 2023, and the creation of Kazakhstan’s Abai Region in 2022.

Global coverage

The 2025 snapshot holds 243 ADM0, 3,492 ADM1 and 55,075 ADM2 units, with real official geometry for 98.3% of ADM2; anything short of that is explicitly flagged as back-filled.

Quick start

Three lines of code to read one year of boundaries

The paths below match what the site actually serves: unzip a country package to get <code>&lt;ISO3&gt;_adm2_timeseries.parquet</code> (plus <code>README.txt</code> and <code>&lt;ISO3&gt;_timeline_events.csv</code>); global anchor years are served as GeoJSON (repo path <code>data/web/</code>; the downloaded file keeps its own name); the event library is <code>data/all_events.csv</code>.

python · read one country’s multi-year series (3 lines)
import geopandas as gpd

bra = gpd.read_parquet("BRA_adm2_timeseries.parquet")
print(bra[bra.snapshot_year == 2010][["unit_id", "name", "area_km2"]].head())
python · global anchor years + provenance fields
import geopandas as gpd

world = gpd.read_file("data/web/global_adm1_2025.geojson")
grade_a = world[world.conf_grade == "A"]

print(grade_a[["name", "iso3", "src_name", "area_km2"]].head())
python · event library (splits and mergers)
import pandas as pd

ev = pd.read_csv("data/all_events.csv", encoding="utf-8-sig")
france = ev[ev["dataset"].str.startswith("FRA")]
print(france[["effective_date", "event_type", "detail"]].head())
Which tool opens the files you downloaded (in one line each)
File / format Open with In one sentence
.zip → .parquet Unzip first; use QGIS 3.28+, Python/GeoPandas, or R/sf Columnar geospatial format: fast to read and compact; Excel cannot open it.
.geojson QGIS / ArcGIS / geojson.io / Python Plain text; drag it into QGIS. Large files may load more slowly.
.pmtiles Map explorer / MapLibre GL JS + PMTiles library Offline vector tiles for a custom web map; not intended as a regular GIS layer.
.csv Excel / WPS / pandas Event tables and manifests; UTF-8 encoded. If Excel shows garbled text, choose UTF-8 when importing.
.gpkg QGIS / ArcGIS (open directly) A single-file geodatabase; no extraction needed and ideal for viewing directly.
SQLite .gpkg / .parquet No-code alternative Preview it on the map explorer first, then decide whether to download the full package.
Global snapshots

Four years that reveal the global three-level structure

An anchor year is a single worldwide snapshot for the same year, which makes cross-year comparison easy; per-country series carry each country’s own full set of years.

Unit counts by global anchor year (2025 is the release baseline)
Anchor year ADM0 country/territory ADM1 first-level ADM2 second-level Web GeoJSON size Download
2000 2433,48657,085 ADM0 0.98 MB · ADM1 8.99 MB Download
2010 2433,48655,511 ADM0 0.98 MB · ADM1 13.09 MB Download
2020 2433,47654,942 ADM0 0.97 MB · ADM1 6.83 MB Download
2025 2433,49255,075 ADM0 0.87 MB · ADM1 162.86 MB · ADM2 (7 groups) 3.4 KB–11.90 MB Download

The sizes shown are for the simplified GeoJSON files served here. Larger, unsimplified GeoParquet / GPKG geometries are in the research release; see the global downloads.

ADM0 · Country/territory

243 administrative units in the 2025 snapshot. Check provenance and confidence for your analysis.

ADM1 · First-level

3,492 administrative units in the 2025 snapshot. Check provenance and confidence for your analysis.

ADM2 · Second-level

55,075 administrative units in the 2025 snapshot. Check provenance and confidence for your analysis.

Provenance &amp; confidence

A / B / C / D, graded feature by feature

Each letter describes source provenance, not an overall quality score. One country may have different grades at different administrative levels. Use the feature-level conf_grade and geom_origin fields when filtering or citing.

About the provenance grades

A

Official, collected directly 52 countries

Native boundaries from IBGE (Brazil), US Census TIGER, MLIT (Japan), CTAmap (China), IGN (France), BKG (Germany), ISTAT (Italy), SSB (Norway), SCB (Sweden), StatCan (Canada), ABS (Australia), INEGI (Mexico) and others.

B

Official via aggregator / GADM fallback 169 countries

Most African countries (OCHA COD-AB, sourced from national statistical offices), the Middle East and parts of Latin America, plus 52 small dependencies (GADM dual anchors, roughly 2018 and 2022 only, date_precision=version_year, not a year-by-year series).

C

OSM / third party 20 countries

North Korea, Iran and others rebuilt from the OSM full-history pipeline. Event dates are the time of OSM mapping rather than the legal effective date, so they should not be cited as statutory change dates.

D

Derived / inferred 2 countries

Geometry derived from the union of other levels or from research methods (for example the composite ADM0 for India and Puerto Rico); not independent source data.

For v1.1, each entity is counted once by its most conservative grade across ADM0–ADM2: A 52 · B 169 · C 20 · D 2 (243 total). Feature grades can differ by level.

Geometry provenance field geom_origin

ValueMeaning
official_actualReal official geometry for that year
dissolved_from_officialDerived from the union of official lower-level units
official_via_gadm_anchorReplaced with a GADM anchor
current_carried_backBack-filled with the 2026 baseline geometry (to be fixed)
Honesty statement: 16 entities (ALB ARM AZE BIH COD CYP DZA GEO GHA IDN KHM MKD PSE SRB TUN UKR XKX) are currently back-filled with the 2026 baseline geometry and flagged geom_origin=current_carried_back, because official sources are unreachable or were interrupted. They are on the to-fix list.
Jargon decoder

See one of these words? Read this line first

The eight terms below cover 90% of the “I don’t understand this” on this site. Hovering (or long-pressing on mobile) any dotted-underline term gives the same hint; full definitions are in the glossary and the field dictionary.

  • ADM0: country- or territory-level unit
  • ADM1: first-level administrative unit
  • ADM2: second-level administrative unit
  • snapshot_year: the year represented by a boundary record
  • unit_id: stable identifier for matching a unit across years
  • conf_grade: A–D source-confidence category
  • geom_origin: how the geometry was obtained
  • date_precision: precision or range of an event date

Also see src_url (source download URL), area_km2 (area in the equal-area EPSG:6933 projection), and manifest.csv (file-wide SHA-256 checksums) — full glossary →

Get started

Download a single country package, or take a global anchor year. Every file ships with a SHA-256 checksum and a provenance grade.

Which file should I get?

Answer three questions (global or one country, how many years, and which software) to get a tailored file recommendation and download links.

Start choosing →

Download by country

244 time-series packages with continent filtering and search, showing levels, year range and size.

Open →

Global packages

4 anchor years × 3 levels = 12 global files, plus the full event library.

Open →

Map explorer

View boundaries and change events for each year online, and play them year by year.

Open →