本文将介绍如何使用Python语言绘制栅格地图。栅格地图常用于电子地图、遥感图像、卫星影像分析等领域,对于数据分析、可视化、地理信息系统等方面都有很大的作用。
一、安装必要的库
要绘制栅格地图,首先需要安装必要的库。其中,主要使用的是numpy、matplotlib和rasterio库。
!pip install numpy
!pip install matplotlib
!pip install rasterio
安装完毕后,可以开始绘制栅格地图。
二、读取栅格数据
在绘制栅格地图前,需要先读取栅格数据。这里以读取tif格式的栅格文件为例。
import rasterio
# 读取栅格数据
dataset = rasterio.open('path/to/raster/file.tif')
# 获取栅格数据的基本信息
width = dataset.width
height = dataset.height
count = dataset.count
bounds = dataset.bounds
# 获取栅格数据的所有波段
bands = []
for i in range(1, count+1):
band = dataset.read(i)
bands.append(band)
读取成功后,现在可以开始绘制栅格地图了。
三、绘制栅格地图
1. 基本地图绘制
要绘制栅格地图,需要先获取栅格数据的坐标系和范围,并根据范围将栅格数据转换为图像数据。这里以坐标系为经纬度坐标系的栅格数据为例,具体实现如下:
import matplotlib.pyplot as plt
from rasterio.plot import show
# 获取栅格数据的坐标系和范围
crs = dataset.crs
transform = dataset.transform
# 将栅格数据转换为图像数据
img = bands[0]
bounds = rasterio.plot.plotting_extent(dataset, transform=transform)
plt.imshow(img, cmap='gray', extent=bounds)
plt.show()
绘制的基本地图如下图所示:

2. 添加比例尺和坐标轴
现在绘制的图像还没有比例尺和坐标轴,可以通过添加axis()函数实现:
fig, ax = plt.subplots(figsize=(10, 10))
# 将栅格数据转换为图像数据
img = bands[0]
bounds = rasterio.plot.plotting_extent(dataset, transform=transform)
plt.imshow(img, cmap='gray', extent=bounds)
ax.set_aspect('equal')
ax.axis('off')
plt.axis('tight')
# 添加比例尺和坐标轴
scalebar = ScaleBar(1, units='m')
plt.gca().add_artist(scalebar)
plt.xlabel('Longitude', fontsize=14)
plt.ylabel('Latitude', fontsize=14)
plt.show()
添加比例尺和坐标轴后的栅格地图如下图所示:

3. 更改投影方式
如果希望更改投影方式,可以使用geopandas库进行投影变换,具体实现如下:
import geopandas as gpd
# 读取和绘制卫星影像
geodf = gpd.read_file('path/to/shapefile.shp')
fig, ax = plt.subplots(figsize=(10, 10))
geodf.plot(ax=ax)
plt.xlabel('Longitude', fontsize=14)
plt.ylabel('Latitude', fontsize=14)
plt.show()
绘制后的卫星影像如下图所示:

四、保存栅格地图
最后,可以使用savefig()函数将绘制的栅格地图保存到本地,代码如下:
fig.savefig("path/to/output/file.png", dpi=300, bbox_inches='tight', pad_inches=0)
保存后的栅格地图如下图所示:
