Sitemap
Abhishek Rawat

Abhishek Rawat

Learning in public. Writing about GIS, AI, data, technology, and lessons from work, research, and life.

India’s Data-Center Boom Has a Water-Risk Question

6 min readJun 25, 2026

--

AI infrastructure is often discussed as an electricity problem.

But in India, it is also becoming a water-risk and site-suitability problem.

As cloud, AI, hyperscale computing, and edge infrastructure expand, the question is no longer only:

Where is land available?
Where is power available?
Where is fiber connectivity strong?

The better planning question is:

Where can digital infrastructure grow without worsening long-term pressure on water, land, energy, and local communities?

That question led me to build a bivariate map of India’s data-center markets and baseline water stress.

Why I mapped this

India’s data-center sector is growing rapidly. Mumbai, Chennai, Hyderabad, Bengaluru, Noida, Pune, New Delhi and other urban markets are becoming important digital infrastructure clusters.

But many of these regions are also exposed to seasonal water stress, groundwater pressure, heat risk, reservoir dependence, or competing urban demand.

WRI India has already highlighted that more than half of India’s data centers are in water-stressed regions.

CEEW’s work on India’s data-center infrastructure also frames water availability as a critical siting issue, especially where cooling demand, climate risk, and urban water demand intersect.

So I wanted to create a map that does not just show data-center locations.

I wanted to show the spatial overlap between:

  1. data-center market pressure, and
  2. baseline water stress.

The core idea: a bivariate map

A bivariate map combines two variables into one color surface.

In this case:

  • One axis = WRI Aqueduct baseline water stress
  • Second axis = data-center pressure

The darkest / most critical cells represent places where both are high:

high water stress + high data-center pressure

This is not a claim of direct causation.

The map does not say data centers caused water shortages.

It asks a planning question:

Are India’s future AI and cloud infrastructure investments clustering in regions where water availability should already be treated as a constraint?

Data used

1. Water stress

I used WRI Aqueduct 4.0 baseline annual water stress.

Source:
https://www.wri.org/data/aqueduct-global-maps-40-data

Aqueduct is useful because it translates hydrological complexity into water-risk indicators that can be used for screening and prioritization.

Important caveat: Aqueduct should be treated as a prioritization layer, not a final local hydrological assessment.

2. Data-center markets

I used DataCenterMap India market-level counts.

Source:
https://www.datacentermap.com/india/

This is not the same as facility-level coordinates or installed MW capacity.

For this map, I treated each city/market as a proxy point and used the listed count as a pressure indicator.

A publication-grade version should replace this with:

  • verified facility coordinates,
  • installed IT capacity in MW,
  • cooling technology,
  • water source,
  • power source,
  • permits,
  • and local water availability data.

3. India data-center and water-risk context

WRI India data visualization:
https://wri-india.org/data/more-half-indias-data-centres-are-water-stressed-regions

CEEW report:
https://www.ceew.in/publications/how-is-data-centre-infrastructure-in-india-shaping-power-and-water-use

Mumbai water-shortage context:
https://www.reuters.com/business/environment/indias-mumbai-rations-water-supply-june-rainfall-hits-12-year-low-2026-06-17/

Get Abhishek Rawat’s stories in your inbox

Join Medium for free to get updates from this writer.

My visualization map/plot:

Press enter or click to view image in full size
India Water Stress along with Data centers
Press enter or click to view image in full size
India’s data center market by water risk
India data-center markets by water risk

Method overview

The workflow was simple:

  1. Download WRI Aqueduct 4.0 water-risk polygons.
  2. Clip/filter them to India.
  3. Prepare a city-level data-center market file.
  4. Convert data-center count into a pressure surface using distance decay.
  5. Bin water stress into low / medium / high.
  6. Bin data-center pressure into low / medium / high.
  7. Combine the two bins into a 3×3 bivariate color matrix.
  8. Overlay market points as glowing bubbles.
  9. Add a Mumbai/Navi Mumbai inset as a seasonal live-water alert.

Code snippet 1: install and import

!pip install geopandas contextily mapclassify shapely pyproj -q

import geopandas as gpd
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path

Code snippet 2: load water-risk and data-centre data

# WRI Aqueduct polygons
water = gpd.read_file("/content/data/aqueduct-4-0-water-risk-data.zip")

# Market-level data-centre counts
dcs = pd.read_csv("/content/data/data_center_markets_india_seed.csv")
# Convert data-centre table to GeoDataFrame
dcs_gdf = gpd.GeoDataFrame(
dcs,
geometry=gpd.points_from_xy(dcs["lon"], dcs["lat"]),
crs="EPSG:4326"
)

Your data-center CSV can be as simple as:

city,lat,lon,dc_count
Mumbai,19.0760,72.8777,54
Navi Mumbai,19.0330,73.0297,25
Hyderabad,17.3850,78.4867,36
Chennai,13.0827,80.2707,33
Bangalore,12.9716,77.5946,31
Noida,28.5355,77.3910,19
Pune,18.5204,73.8567,16
New Delhi,28.6139,77.2090,12
Ahmedabad,23.0225,72.5714,11
Kolkata,22.5726,88.3639,8

Code snippet 3: create water-stress bins

The exact column name depends on the Aqueduct file. In my case, I used the baseline water-stress score column.

WATER_COL = "bws_score"  # change this if your Aqueduct column has a different name

water["water_bin"] = pd.cut(
water[WATER_COL],
bins=[-0.01, 1.0, 3.0, 5.0],
labels=[0, 1, 2]
)
# Handle No Data / Arid classes separately if present
if "bws_label" in water.columns:
invalid = (
water["bws_label"].astype(str).str.contains("No Data", case=False, na=False)
| water["bws_label"].astype(str).str.contains("Arid", case=False, na=False)
)
water.loc[invalid, "water_bin"] = pd.NAop

Code snippet 4: create a simple data-centre pressure score

This creates a distance-decayed score around each listed market.

# Use projected CRS for distance calculation
water_3857 = water.to_crs("EPSG:3857")
dcs_3857 = dcs_gdf.to_crs("EPSG:3857")
centroids = water_3857.geometry.centroid
DECAY_KM = 150
MAX_INFLUENCE_KM = 350
pressure_scores = []
for geom in centroids:pyth
total = 0

for _, dc in dcs_3857.iterrows():
dist_km = geom.distance(dc.geometry) / 1000

if dist_km <= MAX_INFLUENCE_KM:
total += dc["dc_count"] * np.exp(-dist_km / DECAY_KM)

pressure_scores.append(total)
water_3857["dc_pressure"] = pressure_scores
water_3857["dc_bin"] = pd.qcut(
water_3857["dc_pressure"],
q=3,
labels=[0, 1, 2],
duplicates="drop"
)

Code snippet 5: bivariate color matrix

bivar_palette = {
(0, 0): "#dfe8e6", # low water stress, low DC pressure
(0, 1): "#b8d5d1",
(0, 2): "#5bb8c9",
(1, 0): "#f0d29a",
(1, 1): "#c9aaa1",
(1, 2): "#8398ad",
(2, 0): "#f07f36", # high water stress, low DC pressure
(2, 1): "#b95b61",
(2, 2): "#64233d", # high water stress, high DC pressure
}
water_3857["bivar_key"] = list(zip(
water_3857["water_bin"].astype("Int64"),
water_3857["dc_bin"].astype("Int64")
))
water_3857["bivar_color"] = water_3857["bivar_key"].map(bivar_palette)
# Neutral colour for invalid/no-data areas
water_3857["bivar_color"] = water_3857["bivar_color"].fillna("#2A3138")

Code snippet 6: plot the map

import contextily as cx
fig, ax = plt.subplots(figsize=(16, 9), dpi=300)
fig.patch.set_facecolor("#05080D")
ax.set_facecolor("#05080D")
# Basemap
cx.add_basemap(
ax,
source=cx.providers.Esri.OceanBasemap,
crs="EPSG:3857",
zoom=5,
alpha=0.95
)
cx.add_basemap(
ax,
source=cx.providers.Esri.WorldShadedRelief,
crs="EPSG:3857",
zoom=5,
alpha=0.35
)
# Bivariate layer
water_3857.plot(
ax=ax,
color=water_3857["bivar_color"],
edgecolor="#14222B",
linewidth=0.08,
alpha=0.78
)
# Data-centre points
for scale, alpha in [(35, 0.06), (18, 0.12), (8, 0.22)]:
ax.scatter(
dcs_3857.geometry.x,
dcs_3857.geometry.y,
s=dcs_3857["dc_count"] * scale + 100,
color="#81FF75",
alpha=alpha,
linewidth=0
)
ax.scatter(
dcs_3857.geometry.x,
dcs_3857.geometry.y,
s=dcs_3857["dc_count"] * 5.5 + 30,
color="#81FF75",
edgecolor="#EFFFF0",
linewidth=0.45,
alpha=0.96
)
ax.axis("off")
plt.savefig(
"/content/outputs/india_data_centres_water_stress_map.png",
dpi=300,
facecolor=fig.get_facecolor(),
bbox_inches="tight"
)
plt.show()

What the map shows

The output highlights several patterns.

Mumbai is the largest listed data-center market in this dataset. Hyderabad, Chennai, Bengaluru, Navi Mumbai, Noida, Pune, New Delhi and Ahmedabad also emerge as major markets.

But several of these markets overlap with high or extremely high baseline water-stress categories.

That does not mean all of them face the same operational water risk.

It means that water availability should be treated as a screening layer early in site selection, alongside power, fiber, land, flood risk, heat stress, cooling technology and regulatory constraints.

Mumbai needs a separate note

Mumbai/Navi Mumbai is a good example of why a single water-stress layer is not enough.

In the Aqueduct baseline layer, Mumbai does not appear in the same way as some inland high-stress regions. But the city can still face live reservoir stress, seasonal shortages and urban supply constraints.

So I treated the Mumbai water shortage context as a separate live-water alert layer.

This is important because baseline water stress and live reservoir storage are not the same thing.

Useful YouTube learning links

If you want to recreate or improve this analysis, these YouTube searches are useful starting points:

WRI Aqueduct / Water Risk Atlas tutorial
https://www.youtube.com/results?search_query=WRI+Aqueduct+Water+Risk+Atlas+tutorial

Bivariate choropleth maps
https://www.youtube.com/results?search_query=bivariate+choropleth+map+tutorial

GeoPandas mapping tutorial
https://www.youtube.com/results?search_query=geopandas+choropleth+map+tutorial

Contextily basemap tutorial
https://www.youtube.com/results?search_query=contextily+geopandas+basemap+tutorial

Data centres and water consumption explained
https://www.youtube.com/results?search_query=data+centres+water+consumption+AI+explained

Reports and references

WRI Aqueduct 4.0
https://www.wri.org/data/aqueduct-global-maps-40-data

WRI India: More Than Half of India’s Data Centres Are in Water-Stressed Regions
https://wri-india.org/data/more-half-indias-data-centres-are-water-stressed-regions

CEEW: How Is Data Centre Infrastructure in India Shaping Power and Water Use?
https://www.ceew.in/publications/how-is-data-centre-infrastructure-in-india-shaping-power-and-water-use

DataCenterMap India
https://www.datacentermap.com/india/

Reuters: Mumbai rations water supply as June rainfall hits 12-year low
https://www.reuters.com/business/environment/indias-mumbai-rations-water-supply-june-rainfall-hits-12-year-low-2026-06-17/

Contextily documentation
https://contextily.readthedocs.io/

GeoPandas documentation
https://geopandas.org/

Final output

Below is the final map output.

Press enter or click to view image in full size
India’s Data Centre Boom × Water Stress
WRI Aqueduct baseline water stress × listed data-center market pressure

Closing thought

India’s AI infrastructure future should not be planned only through the lens of land banks, power tariffs and fiber corridors.

It needs a more integrated site-suitability framework.

A good data-center site should be:

power-secure,
water-aware,
climate-resilient,
locally defensible,
and socially responsible.

That is the real map we need to build next.

--

--