Skip to content

Bhuvan OGC Services — WMS / WFS / WMTS

Add India's national GIS layers directly to QGIS or your web app — no download needed.


Provider
NRSC / ISRO
Base URL
https://bhuvan-vec1.nrsc.gov.in/bhuvan/wms
Access Level
🟢 No Login for WMS | 🟡 Login for WFS Downloads
Standards
WMS 1.1.1, WFS 2.0, WMTS
Coverage
All India — Administrative, Thematic layers
License
Free for non-commercial use

Available Bhuvan WMS Endpoints

Endpoint URL What It Has
Vector Layer 1 https://bhuvan-vec1.nrsc.gov.in/bhuvan/wms Districts, states, roads, rivers
Vector Layer 2 https://bhuvan-vec2.nrsc.gov.in/bhuvan/wms Villages, blocks, talukas
Satellite Imagery https://bhuvan-ras1.nrsc.gov.in/bhuvan/wms LISS-III, Cartosat imagery tiles
Thematic Maps https://bhuvan-app1.nrsc.gov.in/bhuvan/wms LULC, Forest, Soil

GetCapabilities (to discover all layers):

https://bhuvan-vec1.nrsc.gov.in/bhuvan/wms?SERVICE=WMS&REQUEST=GetCapabilities
Open this URL in your browser to see the full list of available layers in XML format.


Key Layer Names

Layer Name Description
india:INDIA_STATE State boundaries
india:INDIA_DISTRICT District boundaries
india:INDIA_SUBDISTRICT Sub-district / Tehsil
india:INDIA_VILLAGE Village boundaries
india:INDIA_ROADS_NH National Highways
india:INDIA_RIVER_MAJOR Major rivers
india:INDIA_RAILROADS Railway lines
india:INDIA_URBAN Urban agglomeration boundaries

How to Add Bhuvan WMS to QGIS

  1. Open QGIS → Layer menuAdd LayerAdd WMS/WMTS Layer...
  2. Click "New" to create a connection
  3. Fill in:
  4. Name: Bhuvan Vector 1
  5. URL: https://bhuvan-vec1.nrsc.gov.in/bhuvan/wms
  6. Click "OK" → Click "Connect"
  7. Browse the layer list → Select india:INDIA_DISTRICT
  8. Click "Add" → Close
  9. The district boundaries appear on your map canvas!

Python: Query WFS and Save as Shapefile

from owslib.wfs import WebFeatureService
import geopandas as gpd
from io import BytesIO
import requests

# Connect to Bhuvan WFS
WFS_URL = "https://bhuvan-vec1.nrsc.gov.in/bhuvan/wfs"

wfs = WebFeatureService(WFS_URL, version='1.1.0')

# List all available layers
print("Available WFS layers:")
for layer in list(wfs.contents)[:10]:
    print(f"  - {layer}")

# Download all India districts as GeoJSON
response = wfs.getfeature(
    typename='india:INDIA_DISTRICT',
    outputFormat='application/json'
)

gdf = gpd.read_file(BytesIO(response.read()))
print(f"\nDownloaded {len(gdf)} district features")
print(f"Columns: {list(gdf.columns)}")
print(gdf.head())

# Save as shapefile
gdf.to_file("bhuvan_india_districts.shp")
print("\nSaved to bhuvan_india_districts.shp")

✏️ Practice Exercise

Exercise 6.1 — Load 3 Bhuvan Layers in QGIS

Goal: Build a base map of your state using Bhuvan WMS layers.

  1. Add Bhuvan WMS connection (steps above)
  2. Add three layers:
  3. india:INDIA_DISTRICT — styled with hollow fill, dark border
  4. india:INDIA_RIVER_MAJOR — styled in blue
  5. india:INDIA_ROADS_NH — styled in red
  6. Filter districts to your state using Layer Properties → Source → Query Builder:
    "STATE_NAME" = 'MAHARASHTRA'
    
  7. Make a print layout with title, legend, and north arrow

  8. How many districts does your state have?

  9. How many national highways pass through your state?

Next: GEE Python API →