Skip to main content

Nepal Geo Data: Complete Geographical GeoJSON for Nepal

PyPI version License: MIT

Nepal Geo Data is the most comprehensive Python package for Nepal's geographical data. It provides high-quality GeoJSON for all 77 Districts, 7 Provinces, and 753 Local Levels (Municipalities/Gaunpalikas), along with rich metadata (Nepali names, official codes).

Whether you are building a dashboard in Streamlit, analyzing spatial data with Pandas/GeoPandas, or creating interactive maps with Plotly/Folium, this package provides the map data you need with a simple API.

Key Features

  • Complete Administrative Coverage:
    • 7 Provinces (Pradesh)
    • 77 Districts (Jilla)
    • 753 Local Levels (Palikas/Municipalities) - New in v0.2.0!
  • Rich Metadata: Includes English names, Nepali names (e.g., "Kathmandu", "काठमाडौँ"), and official government codes.
  • Zero Dependencies: Works with standard Python libraries.
  • GIS Ready: Outputs standard FeatureCollections compatible with GeoPandas (gpd.read_file), Folium, and Plotly.
  • Coordinate Reference System (CRS): WGS84 (EPSG:4326). All coordinates are in Latitude/Longitude.
  • Backward Compatible: Preserves legacy behavior (UPPERCASE district keys) for existing projects.

Installation

Install via pip from PyPI:

pip install nepal-geo-data

Quick Start & Tutorials

1. Districts and Provinces

Get lists and details of administrative boundaries.

import nepal_geo_data

# Print the built-in guide
nepal_geo_data.help()

# Get all district names
districts = nepal_geo_data.get_districts()
print(districts) 
# Output: ['ACHHAM', 'ARGHAKHANCHI', ..., 'UDAYAPUR']

# Get details for a specific district (Case Insensitive)
ktm = nepal_geo_data.get_district("Kathmandu")
print(ktm['properties']['district_name_np'])  # Output: काठमाडौँ
print(ktm['properties']['province_name_en'])  # Output: Bagmati Province

# Get all districts in a specific province (e.g., Karnali Province / Province 6)
karnali_districts = nepal_geo_data.get_province_districts(6)

2. Working with Municipalities (New!)

The package now supports all 753 Local Levels.

Get All Municipalities

# Get a list of ALL municipalities in Nepal
all_munis = nepal_geo_data.get_municipalities()
print(f"Total Municipalities: {len(all_munis)}") # 753
print(all_munis[:5]) 

Filter Municipalities by District

The get_municipalities function accepts an optional district_name parameter.

# Get only municipalities in 'Jhapa' district
jhapa_munis = nepal_geo_data.get_municipalities("Jhapa")

print(f"Municipalities in Jhapa: {len(jhapa_munis)}")
for muni in jhapa_munis:
    print(f"- {muni}")
    
# Output:
# - Arjundhara
# - Bhadrapur
# - Birtamod
# ...

Get Municipality Details & Map Data

Search for a specific municipality to get its full GeoJSON (coordinates, codes, Nepali name).

# Get data for 'Kathmandu Metropolitan City'
# You can search by English name (case-insensitive)
ktm_metro = nepal_geo_data.get_municipality("Kathmandu Metropolitan City")

if ktm_metro:
    props = ktm_metro['properties']
    print(f"Name (EN): {props['gapa_napa']}")      # Kathmandu Metropolitan City
    print(f"Name (NP): {props['gapa_napa_np']}")  # काठमाडौँ महानगरपालिका
    print(f"Type: {props['type']}")                # Mahanagarpalika
    print(f"District ID: {props['district_code']}")
    
    # Access geometry for plotting
    # geometry = ktm_metro['geometry']

3. Integration with Plotly (Choropleth Maps)

Create stunning interactive maps using the GeoJSON data.

import plotly.express as px
from nepal_geo_data import get_geojson

# Load District GeoJSON
nepal_geojson = get_geojson()

# Dummy data dictionary
data_dict = {'KATHMANDU': 100, 'LALITPUR': 80, 'BHAKTAPUR': 60}
# Convert to list of dicts for Plotly
data = [{'District': k, 'Value': v} for k, v in data_dict.items()]

fig = px.choropleth_mapbox(
    data_frame=data,
    geojson=nepal_geojson,
    locations='District',
    featureidkey="properties.DISTRICT", # Using the backward-compatible key
    color='Value',
    center={"lat": 28.3949, "lon": 84.1240},
    mapbox_style="carto-positron",
    zoom=6,
    title="Nepal District Density Map"
)
fig.show()

📚 API Reference & Examples

Here is a complete list of all available functions with examples.

1. Administrative Lists

get_districts()

Returns a list of all 77 districts in Nepal.

import nepal_geo_data
districts = nepal_geo_data.get_districts()
print(districts[:5]) 
# output: ['ACHHAM', 'ARGHAKHANCHI', 'BAGLUNG', 'BAITADI', 'BAJHANG']

get_provinces()

Returns a list of metadata for all 7 provinces.

provinces = nepal_geo_data.get_provinces()
for p in provinces:
    print(f"{p['province_name_en']} (ID: {p['province_code']})")

get_province_districts(province_id)

Returns a list of districts within a specific province (IDs 1-7).

# Get districts in Karnali Province (ID: 6)
karnali = nepal_geo_data.get_province_districts(6)
print(karnali)

get_municipalities(district_name=None)

Returns a list of all 753 municipalities. Optionally filter by district.

# All municipalities
all_munis = nepal_geo_data.get_municipalities()

# Filter by district (e.g., Chitwan)
chitwan_munis = nepal_geo_data.get_municipalities("Chitwan")
print(chitwan_munis)

get_wards(municipality_name)

Returns a list of ward numbers for a specific municipality.

wards = nepal_geo_data.get_wards("Kathmandu Metropolitan City")
print(f"Total Wards: {len(wards)}") # 32
print(wards) # [1, 2, 3, ..., 32]

2. Search & Details (Rich Metadata)

get_district(name)

Get full details including geometry, headquarters, and codes.

data = nepal_geo_data.get_district("Kaski")
props = data['properties']
print(f"District: {props['district_name_en']}")
print(f"Headquarter: {props['headquarter']}")
print(f"Area: {props['area_sq_km']} sq km")

get_municipality(name)

Get full details including wards, website, and geometry.

muni = nepal_geo_data.get_municipality("Pokhara Lekhnath Metropolitan City")
props = muni['properties']
print(f"Website: {props.get('website')}")
print(f"Wards: {props.get('wards')}")

get_boundaries(district_name)

Get only the geometry (Polygon/MultiPolygon) for mapping.

geom = nepal_geo_data.get_boundaries("Mustang")
# Use with Shapely or GeoPandas
# shape = shapely.geometry.shape(geom)

3. Raw GeoJSON Data

Access the raw FeatureCollections directly for use with GIS libraries like GeoPandas.

get_geojson()

All districts as a FeatureCollection.

import geopandas as gpd
geojson = nepal_geo_data.get_geojson()
gdf = gpd.GeoDataFrame.from_features(geojson)
gdf.plot()

get_provinces_geojson()

All provinces as a FeatureCollection.

get_municipalities_geojson()

All municipalities as a FeatureCollection.

4. Interactive Help

help()

Prints a quick guide to the console.

nepal_geo_data.help()

🚀 Advanced Usage & Integrations

1. Plotly Integration: Mapping Provinces

Here is a complete example of how to create a Choropleth map of Nepal's 7 Provinces using plotly.express.

import plotly.express as px
from nepal_geo_data import get_provinces_geojson

# 1. Get Province GeoJSON
province_geojson = get_provinces_geojson()

# 2. Prepare Data (Example: Population or GDP by Province)
# Note: Keys must match the Feature properties (e.g., 'province_name_en' or 'province_code')
data = [
    {'Province': 'Koshi Province', 'Value': 10},
    {'Province': 'Madhesh Province', 'Value': 20},
    {'Province': 'Bagmati Province', 'Value': 50},
    {'Province': 'Gandaki Province', 'Value': 30},
    {'Province': 'Lumbini Province', 'Value': 40},
    {'Province': 'Karnali Province', 'Value': 5},
    {'Province': 'Sudurpaschim Province', 'Value': 15},
]

# 3. Create Map
fig = px.choropleth_mapbox(
    data_frame=data,
    geojson=province_geojson,
    locations='Province',             # Key in 'data'
    featureidkey="properties.province_name_en", # Key in GeoJSON properties
    color='Value',
    center={"lat": 28.3949, "lon": 84.1240},
    mapbox_style="carto-positron",
    zoom=6,
    title="Nepal Province-wise Distribution",
    opacity=0.7
)

fig.update_layout(margin={"r":0,"t":40,"l":0,"b":0})
fig.show()

2. GeoPandas Integration (Static Maps)

Easily convert data for spatial analysis.

import geopandas as gpd
from nepal_geo_data import get_municipalities_geojson

# Load all 753 municipalities into a GeoDataFrame
gdf = gpd.GeoDataFrame.from_features(get_municipalities_geojson())

# Filter for a specific district
ktm_munis = gdf[gdf['district_name_en'] == 'Kathmandu']

# Plot
ktm_munis.plot(column='type', legend=True, figsize=(10, 10))

3. Folium Integration (Interactive Web Maps)

import folium
from nepal_geo_data import get_boundaries

# Create base map
m = folium.Map(location=[28.3949, 84.1240], zoom_start=7)

# Add District Boundary (e.g., Mustang)
mustang_geom = get_boundaries("Mustang")
folium.GeoJson(
    mustang_geom,
    style_function=lambda x: {'color': 'red', 'fillOpacity': 0.3}
).add_to(m)

m.save("nepal_map.html")

Contributing

We welcome contributions! GitHub Repository: https://github.com/bedbyaspokhrel/nepal-geo-data

License

MIT License - see the LICENSE file for details.


Keywords: Nepal GIS, Nepal Map Python, GeoJSON Nepal, Nepal Districts Data, Nepal Municipalities, Local Level Nepal, Gaunpalika, Nepal Provinces JSON, Python GIS Nepal.

Metadata

Release files for nepal-geo-data 0.3.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nepal-geo-data 0.3.3
File Size Uploaded
nepal_geo_data-0.3.3.tar.gz 2.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for nepal-geo-data 0.3.3
File Interpreter ABI Platform
nepal_geo_data-0.3.3-py3-none-any.whl Python 3 none any Details

Total release size: 4.7 MB

Release files / nepal_geo_data-0.3.3.tar.gz

Download URL nepal_geo_data-0.3.3.tar.gz
Size 2.4 MB
Tags Source
SHA-256 checksum
How to use checksums
37c4265f7f6e9c0edb9f3fca928f79e598d3ad419ecb8db3621620cbd6b71771
BLAKE2b-256 checksum
How to use checksums
469bef95304315bd45001018afa09ff585e7c36d52c61638592789a75e32fd55
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release files / nepal_geo_data-0.3.3-py3-none-any.whl

Download URL nepal_geo_data-0.3.3-py3-none-any.whl
Size 2.4 MB
Tags Python 3
SHA-256 checksum
How to use checksums
efa4cdc6a1f97a1adb2dc7048557d6905a4f15394db836fb5653082f9e7148c4
BLAKE2b-256 checksum
How to use checksums
396cf44c52cb51f59eec774c6c5d3c6630a786df7cdcdc876b3ac0cfd479be15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

0.3.3 This release

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page