GADM — Global Administrative Areas¶
The most widely used academic boundary dataset — clean, consistent, and freely downloadable for research.
What Is GADM?¶
GADM (Global Administrative Areas) is a database of the world's administrative boundaries. For India, it provides:
| Level | Admin Level | Example |
|---|---|---|
| Level 0 | Country | India |
| Level 1 | State / Union Territory | Maharashtra, Goa, Delhi |
| Level 2 | District | Pune, Nashik, Nagpur |
| Level 3 | Sub-district / Taluka | Haveli, Mulshi |
Why researchers love GADM: - Consistent geometry across all countries - Works perfectly for cross-country comparisons - Each boundary comes with an attribute table of names and codes - Peer-reviewed and widely cited in academic papers
How to Download¶
Direct Download from gadm.org 🟢¶
- Go to https://gadm.org/download_country.html
- Select Country: India
- Choose format:
- Shapefile — for QGIS or ArcGIS
- GeoJSON — for web development or Python
- GeoPackage — modern single-file format (recommended)
- Click the level you want (Level 0, 1, 2, or 3)
- Download immediately — no account needed
Using R (for R users) 🔵¶
# Install the geodata package
install.packages("geodata")
library(geodata)
# Download India districts (Level 2)
india_districts <- gadm("IND", level=2, path=tempdir())
plot(india_districts)
# Access attribute data
head(india_districts@data)
Using Python + geopandas 🔵¶
import geopandas as gpd
# If you've downloaded the GeoJSON:
india = gpd.read_file("gadm41_IND_2.json")
# View first few rows
print(india.head())
print(f"Number of districts: {len(india)}")
# Plot
india.plot(figsize=(12,10), edgecolor='black', facecolor='lightyellow')
Key Attribute Fields¶
| Field | Description | Example |
|---|---|---|
GID_0 |
Country ISO code | IND |
NAME_0 |
Country name | India |
GID_1 |
State code | IND.16_1 |
NAME_1 |
State name | Maharashtra |
GID_2 |
District code | IND.16.20_1 |
NAME_2 |
District name | Pune |
GID_3 |
Sub-district code | IND.16.20.1_1 |
NAME_3 |
Sub-district name | Haveli |
Licence¶
Academic Use Only
GADM data is free for non-commercial academic use. For commercial use (building products, apps), you need permission or must use an alternative like OSM or official government data.
GADM vs OSM vs Official Boundaries¶
| GADM | OSM | Official (Census/SOI) | |
|---|---|---|---|
| Best for | Research papers | Web maps, routing | Legal/official purposes |
| Village level | ❌ | ✅ | ✅ (hard to get) |
| Always up-to-date | Sometimes outdated | ✅ | Sometimes outdated |
| Free | Academic use | ✅ | Varies |
| Easy to download | ✅ | ✅ | Varies |
✏️ Practice Exercise¶
Exercise 1.3 — Count Districts per State
Goal: Use GADM data to find which Indian state has the most districts.
import geopandas as gpd
import matplotlib.pyplot as plt
# Load GADM Level 2 (Districts)
india = gpd.read_file("gadm41_IND_2.json")
# Count districts per state
district_count = india.groupby('NAME_1')['NAME_2'].count().sort_values(ascending=False)
print("Top 10 states by number of districts:")
print(district_count.head(10))
# Plot bar chart
district_count.head(15).plot(kind='bar', figsize=(12,6), color='saddlebrown')
plt.title("Districts per State (Top 15)")
plt.xlabel("State")
plt.ylabel("Number of Districts")
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.savefig("districts_per_state.png", dpi=150)
plt.show()
Expected answer: Uttar Pradesh has the most districts (~75), followed by Madhya Pradesh (~55).
Next Dataset: Bhuvan Basemaps (ISRO) →